Как разделить число на цифры c
Изучаю С по книге дейтеля,в одном из упражнений стоит сл. задача:
Написать программу,которая считывает число из 5 цифр,разделяет это число на отдельные цифры и выводит эти цифры отделя пробелами.
напр если ввели 45612 то вывести должно 4 5 6 1 2.
Все задания выполнил кроме этого,понимаю что метод есть в книге,но пересматривая главу так и не нашёл как.
Всё что я смог:
int n;
printf («vvedite chislo:\n»)
scanf («%d»,&n);
а вот что здесь должно быть? Т.к. этот оператор просто вывводит то же число
Разбивание числа на цифры
Доброго всем. Задача из учебника Дейтела. Скажу сразу, изучаю Си самостоятельно(не учебное заведение). С задачей справился, но есть вопрос. В начале, введенное четырехзначное число нужно разбить на отдельные цифры используя деление и взятие по модулю. Я додумался до способа который привел в коде. Понимаю, что можно еще преобразовать введенное число в строку и тоже вывести цифры по отдельности. А есть ли еще какие нибудь способы разбить число на отдельные цифры кроме перечисленных мной? а то много задач встречается с таким вопросом.
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
/*3_46. Шифрование четырехзначного числа*/ /* Заменить каждую цифру значением (суммы этой цифры и 7)*/ /* по модулю 10. Затем поменять местами 1-ю и 3-ю цифры,*/ /* затем поменять 2-ю и 4-ю цифры*/ #include main() { int integer; /*Введенное число*/ int A1; /*Переменная первой цифры*/ int A2; /*второй*/ int A3; /*третьей*/ int A4; /*четвертой*/ int temporary; /*Переменная для временного хранения*/ printf("Enter an integer(4 digits): "); scanf("%d", &integer); /*-------------------------------------------------------*/ /*Разбивание числа на отдельные цифры*/ /*Тысячи*/ A1 = (integer - (integer % 1000)) / 1000; /*Сотни*/ A2 = ((integer - (integer % 100)) - (integer - (integer % 1000))) / 100; /*Дестки*/ A3 = ((integer - (integer % 10)) - (integer - (integer % 100))) / 10; /*Единицы*/ A4 = integer % 10; /*----------------------------------------------------------*/ /*Заменяем каждую цифру на значение (сумма цифры и 7) по модулю 10*/ A1 = (A1 + 7) % 10; A2 = (A2 + 7) % 10; A3 = (A3 + 7) % 10; A4 = (A4 + 7) % 10; /*----------------------------------------------------------*/ /*Меняем местами первую и третью цифры*/ temporary = A3; A3 = A1; A1 = temporary; /*-----------------------------------------------------------*/ /*Меняем местами вторую и четвертую цифры*/ temporary = A4; A4 = A2; A2 = temporary; /*------------------------------------------------------------*/ /*Выводим зашифрованное число*/ printf("\n%d%d%d%d", A1, A2, A3, A4); return 0; }
Как разделить число на цифры c
Здравствуйте, TheAteist, Вы писали:
TA>В конечом итоге iDigits должен содержать , но там вместо этого
TA>Почему и как это исправить?
А как вы это выяснили, покажите пожалуйста =)
Re: Разобрать число на цифры
| От: | Анатолий Широков |
| Дата: | 15.11.08 00:17 |
| Оценка: |
Здравствуйте, TheAteist, Вы писали:
Какой-то мудреный алгоритм вы использовали. Взгляните:
int d = 12345; char buffer[16] = ; char* head = buffer; while( d ) < *head++ = "0123456789"[d%10]; d /= 10; >
Вам останется лишь реверсировать полученный результат.
Re[2]: Разобрать число на цифры
| От: | TheAteist |
| Дата: | 15.11.08 01:17 |
| Оценка: |
Здравствуйте, Dr.Offset, Вы писали:
DO>А как вы это выяснили, покажите пожалуйста =)
После деление на 10
(fNum / 10 - iNum / 10)
получается уже не 1234.500000, а 1234.50000001
потом 123.40000079.
и при каждом деление на 10 точность меняется и получается уже 1.1999999999 вместо 1.20000000.
Re[2]: Разобрать число на цифры
| От: | Roman Odaisky |
| Дата: | 15.11.08 12:16 |
| Оценка: |
Здравствуйте, Анатолий Широков, Вы писали:
Вместо
АШ>»0123456789″[d%10];
лучше бы ‘0’ + d % 10. (Хотя стандарт этого и не гарантирует, в природе не встречаются кодировки, в которых ‘9’ ≠ ‘0’ + 9.)
А еще так можно: (d % 10)[«0123456789»]
До последнего не верил в пирамиду Лебедева.
Re: Пояснение
| От: | TheAteist |
| Дата: | 15.11.08 12:26 |
| Оценка: |
Здравствуйте, TheAteist, Вы писали:
То что я пытался сделать это разделить пятизначное число на цифры следующим образом.
Например число 12345:
float fNum = 12345; int iNum; iNum = fNum; //fNum = iNum = 12345 //Первый цыкл (fNum / 10 - iNum / 10) * 10 // => ((float)12345/10 - (int)12345/10) * 10 = 0.500000000000000000 * 10 = 5.000000000000000, сохраняю эту цифру fNum = (fNum / 10) - ((fNum / 10 - iNum / 10)) // => (float)12345/10 - ((float)12345/10 - (int)12345/10) = 1234.50000000000000-(1234.50000000000000 - 1234)= 1234.50000000000000 - 0.500000000000000 = 1234.0000000000000=> fNum = 1234.0000000000000 iNum = fNum; // iNum = 1234 //Второй цыкл (fNum / 10 - iNum / 10) * 10 // => ((float)1234/10 - (int)1234/10) * 10 = 0.40000000000000568 * 10 = 4.000000000000568, сохраняю эту цифру fNum = (fNum / 10) - ((fNum / 10 - iNum / 10)) // => (float)1234/10 - ((float)1234/10 - (int)1234/10) = 123.40000000000001-(123.40000000000001 - 123)=123.40000000000001 - 0.4000000000000568=> fNum = 123.00000000000000 iNum = fNum; // iNum = 123 //Третий цыкл (fNum / 10 - iNum / 10) * 10 // => ((float)123/10 - (int)123/10) * 10 = 0.3000000000000071 * 10 = 3.0000000000000718, сохраняю эту цифру fNum = (fNum / 10) - ((fNum / 10 - iNum / 10)) // => (float)123/10 - ((float)123/10 - (int)123/10) = 12.30000000000001-(12.30000000000001 - 12)=12.30000000000001 - 0.300000000000071=> fNum = 12.00000000000000 iNum = fNum; // iNum = 12 //Четвертый цыкл (fNum / 10 - iNum / 10) * 10 // => ((float)12/10 - (int)12/10) * 10 = 0.1999999999999996 * 10 = 1.999999999999996, сохраняю эту цифру Как уже видно в четвертом цыкле уже получается не 2.00000000000000, а 1.99999999999999999 и тогда созраняается не 2, а 1. И после всех цыклов получается iDigits=, a не
Надеюсь, что я себя правильно объяснил.
Мне нужно таким способом это сделать. Где мне что-то добавить или исправить?
Re: Разобрать число на цифры
| От: | Nikita123 |
| Дата: | 17.11.08 11:34 |
| Оценка: |
Здравствуйте, TheAteist, Вы писали:
TA>В конечом итоге iDigits должен содержать , но там вместо этого
TA>Почему и как это исправить?
TA>
TA> float fNum=12345; TA> > TA>
Как разбить число на символы?
Есть условное шестизначное число 123456, как можно разбить его на 6 цифр и каждую записать в отдельную переменную?
- Вопрос задан более двух лет назад
- 505 просмотров
Комментировать
Решения вопроса 2
Владимир Коротенко @firedragon
Не джун-мидл-сеньор, а трус-балбес-бывалый.
Есть метод ToString
Дальше перебираете эту строку и получаете значениЯ
Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать

Василий Банников @vabka Куратор тега C#
Токсичный шарпист
Можно разбить посимвольно, как советует Владимир Коротенко, а можно использовать целочисельное деление и взятие остатка.
Например так:
var digits = new List(); var number = 123456; while(number > 0) < var digit = number % 10; digits.Add(digit); number /= 10; >Console.WriteLine($"Последняя цифра числа: "); // 6
Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать
