Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
1

Многозначные числа

14.04.2010, 01:25. Просмотров 1845. Ответов 9
Метки нет (Все метки)

Помогите разобраться с задачкой... Дано многозначное число. Вывести на печать число, состоящее из цифр, которые встречаются более одного раза в записи первоначального числа, либо вообще не встречаются в записи первоначаьного числа
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2010, 01:25
Ответы с готовыми решениями:

Составить программу для деления числа а на число b, если а, b — многозначные числа
Составить программу для деления числа а на число b, если а, b — многозначные числа на VBA. ...

Многозначные числа
1. Дано многозначное число. Определить сколько в нем цифр. 2. Записать данное многозначное число в...

Многозначные поля
Есть ли функция которая проверяет есть ли в поле значение с таким индексом? на ЛС.

Многозначные поля
Есть текстовое поле, в свойсвах стоит "Разрешить несколько значении". также в качесве разделитей...

9
31 / 30 / 19
Регистрация: 18.01.2010
Сообщений: 123
14.04.2010, 01:43 2
в консоли надо ?
0
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
14.04.2010, 02:08  [ТС] 3
ну вообще да, хотя это не принципиально.
0
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
14.04.2010, 07:36 4
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
#define REPEATSMIN  1   /* минимальное количество повторов */
 
/* выводит повторяющиеся цифры */
int main(void) /* ANSI C89 */
{
    const char *number = "12934872344569871234897342";
    
    char visdigit[10] = "0123456789";
    int cntdigit[10] = { 0 };
    int c, i, j;
    
    for (i = 0; (c = number[i]) != '\0'; i++)
        if (isdigit(c)) {
            for (j = 0; j < 10; j++)
                if (visdigit[j] == c)
                    cntdigit[j]++;
        }
    
    printf("digits repeating:");
    for (i = 0; i < 10; i++)
        if (cntdigit[i] > REPEATSMIN)
            printf(" %c", visdigit[i]);
    putchar('\n');
    
    return EXIT_SUCCESS;
}
1
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
15.04.2010, 00:53  [ТС] 5
Спасибо огромное!

Как можно сделать так, чтобы число можно было ввести с клавиатуры?

Вот кое-что подкорретировал, но не работает(

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
#define REPEATSMIN  1   /* ìèíèìàëüíîå êîëè÷åñòâî ïîâòîðîâ */
 
/* âûâîäèò ïîâòîðÿþùèåñÿ öèôðû */
int main(void) /* ANSI C89 */
{
     long int *number;
    printf("Please, enter the number\n");
    scanf("%ld ",&number);
    char visdigit[10] = "0123456789";
    int cntdigit[10] = { 0 };
    int c, i, j;
    
    for (i = 0; (c = number[i]) != '\0'; i++)
        if (isdigit(c)) {
            for (j = 0; j < 10; j++)
                if (visdigit[j] == c)
                    cntdigit[j]++;
        }
    
    printf("Result:\n");
    for (i = 0; i < 10; i++)
        if (cntdigit[i] > REPEATSMIN)
            printf(" %c", visdigit[i]);
    putchar('\n');
    
    getch();
}
0
Модератор
Автор FAQ
3682 / 959 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
15.04.2010, 01:00 6
inferno mf, в коде у accept переменная number - строкового типа, а вы сделали числом - конечно не будет работать. Считать в строку можно так:
C
1
2
3
    char number[50];
    printf("Please, enter the number\n");
    scanf("%s",&number[0]);
1
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
15.04.2010, 01:13  [ТС] 7
Цитата Сообщение от insideone Посмотреть сообщение
inferno mf, в коде у accept переменная number - строкового типа, а вы сделали числом - конечно не будет работать. Считать в строку можно так:
C
1
2
3
    char number[50];
    printf("Please, enter the number\n");
    scanf("%s",&number[0]);
ясно. спасибо большое!

просто я хотел как-то предусмотреть тот случай, чтобы нельзя было использовать числа вещественного типа.
0
Модератор
Автор FAQ
3682 / 959 / 114
Регистрация: 10.01.2010
Сообщений: 2,550
15.04.2010, 01:16 8
Цитата Сообщение от inferno mf Посмотреть сообщение
просто я хотел как-то предусмотреть тот случай, чтобы нельзя было использовать числа вещественного типа.
Вполне логично! Тогда можно считать в какую-нибудь переменную вроде int num; а потом сделать так:
C
1
itoa(num, &number[0], 10);
Эта функция переведет число в строковое представление
1
1 / 1 / 1
Регистрация: 13.09.2009
Сообщений: 96
15.04.2010, 01:36  [ТС] 9
Цитата Сообщение от insideone Посмотреть сообщение
Вполне логично! Тогда можно считать в какую-нибудь переменную вроде int num; а потом сделать так:
C
1
itoa(num, &number[0], 10);
Эта функция переведет число в строковое представление
теперь отлично работает! спасибо огромное!

не подскажете еще как можно сделать так, чтобы выводилось сообщение в случае того, если не будет совпадающих цифр?
C
1
2
3
4
5
 printf("Result:\n");
    for (i = 0; i < 10; i++)
        if (cntdigit[i] > REPEATSMIN)
            printf("%c\n", visdigit[i]);
          else printf("None!");
так сообщение выводится по количеству итераций в цикле(
0
4848 / 3269 / 466
Регистрация: 10.12.2008
Сообщений: 10,569
15.04.2010, 03:32 10
новая версия
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
 
#define REPEATSMIN  1     /* минимальное количество повторов */
#define NUMBLENMAX  100   /* максимальная длина числа */
 
 
/* выводит повторяющиеся цифры */
int main(void) /* ANSI C89 */
{
    /* const char *number = "12934872344569871234897342"; */
    
    char number[NUMBLENMAX];
    char visdigit[10] = "0123456789";
    int cntdigit[10] = { 0 };
    int c, i, j;
    int repflag;
    
    
    printf("enter a number (integer): ");
    fflush(stdout);
    
    for (i = 0; (c = getchar()) != EOF
      && isdigit(c) && i+1 < NUMBLENMAX; i++)
        number[i] = c;
    
    number[i] = '\0';
        
        
    for (i = 0; (c = number[i]) != '\0'; i++)
        if (isdigit(c)) {
            for (j = 0; j < 10; j++)
                if (visdigit[j] == c)
                    cntdigit[j]++;
        }
    
    
    printf("the number: %s" "\n", number);
    
    printf("repeating digits: ");
    
    repflag = 0;
    
    for (i = 0; i < 10; i++)
        if (cntdigit[i] > REPEATSMIN) {
            
            if (repflag == 0)
                repflag = 1;
            
            printf("%c%s", visdigit[i], (i+1 < 10 ? " " : ""));
        
        }
    
    if (repflag == 0)
        printf("none");
    
    putchar('\n');
    
    
    return EXIT_SUCCESS;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
15.04.2010, 03:32

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Insert Into Многозначные поля
Добрый день! Возникла такая задача: два столбца в таблице (таблица1) являются многозначными...

Как читать многозначные поля в MS Access?
Уважаемые коллеги! Кто-нибудь обладает сакральным знанием о том, как читать многозначные поля в MS...

Однозначные элементы массива оставить без изменения, многозначные заменить на сумму цифр
Дан массив от 1 до N . Если число из массива однозначное то оставить его как есть , а если...

Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы получившиеся числа были взаимно простыми
Даны натуральные числа M, N. Поменять одну из цифр первого числа с цифрой второго числа, чтобы...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.