Как разделить число на цифры?
Например, дано число 123456789, нужно разделить его на отдельные цифры, 1, 2, 3, 4, 5, 6, 7, 8, 9, чтобы их потом можно было бы присвоить к какой-то переменной. И как называется сам этот процесс, чтобы поподробнее прочитать про эту функцию потом.
Отслеживать
8,677 18 18 золотых знаков 74 74 серебряных знака 183 183 бронзовых знака
задан 14 мар 2012 в 17:55
1,880 18 18 золотых знаков 75 75 серебряных знаков 133 133 бронзовых знака
На Питоне: digits = map(int, str(n)) или digits = lambda n, result=[]: digits(n//10, [n%10] + result) if n else result or [0] См. Как разложить двузначное число на два однозначных
7 дек 2016 в 18:24
12 ответов 12
Сортировка: Сброс на вариант по умолчанию
#include #include #include main () < int num = 12345678, idig = 5; char digs[20]; sprintf(digs, "%d", num); if (strlen(digs) >idig) printf ("%d-th digit in %d is '%c'\n", idig, num, digs[idig - 1]); else printf ("there is no %d-th digit in %d\n", idig, num); >
Если честно, то мне трудно понять смысл этих строчек:
sprintf(digs,"%d",num); if (strlen(digs) > idig) printf ("%d-th digit in %d is '%c'\n", idig, num, digs[idig - 1]); else printf ("there is no %d-th digit in %d\n", idig, num);
Вот тут я запутываюсь, а точнее в форматах ( % ).
Кратко описываю непонятные Вам места с форматами. Подробно можно прочитать в man 3 fprintf.
Функции семейства printf ( sprintf() , fprintf() и другие) выводят значение своих аргументов в виде последовательности символов в соответствии с форматами, передаваемыми аргументом функции в виде строки. printf() выводит символы в stdout , fprintf() — в указанный FILE * , а sprintf() — в строку (массив char ) в вашей программе.
Текст строки форматов можно разделить на собственно форматы, «управляющие» (Control) и просто символы.
- Просто символы копируются на выход «как есть».
- Control символы управляют выводом текста на терминал (NewLine, Tab и пр.), их записывают в форматах, начиная символом «бэкслеш» («\»). Например: \n — Newline, \t — табуляция, \g — bell (терминал пищит). Также (это по правилам записи строковых констант в С) надо писать \» для вывода кавычки. Если надо вывести сам символ «\», то его надо удвоить: \\ .
- Символ «%» в строке форматов имеет особое значение. Он начинает очередной формат, который говорит, в каком виде должен быть выведен следующий аргумент и какого он типа. Например:
- %d — вывести аргумент типа int в виде десятичного числа,
- %c — вывести аргумент типа char (или младший байт int ) как символ (то есть без преобразований),
- %x — вывести аргумент типа int в виде шестнадцатеричного числа и так далее. Форматов много, они удобны. Прочтите man и пользуйтесь.
Возвращаясь к указанным Вами непонятным местам в программе:
- sprintf(digs, «%d», num); сформирует в массиве digs последовательность цифр числа и переменной num в соответствии с форматом %d (то есть выводит в строку число в десятичном виде);
- if (strlen(digs) > idig) проверяет, есть ли вообще цифра номер idig . Например Вы хотите вывести шестую цифру числа, а в числе (например 3) цифра всего одна.
- printf («%d-th digit in %d is ‘%c’\n», idig, num, digs[idig — 1]); вывести в stdout:
- первый %d — переменную idig (номер цифры в числе) как десятичное число,
- второй %d — переменную num как десятичное число,
- %c — символ из массива digs (искомую цифру) «как есть».
Надеюсь, теперь стало понятнее. А вообще, читайте, читайте и еще раз читайте документацию.
Как разбить число на цифры в паскале
Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: РомаРепутация: 0
Посмотрите пожалста задачу, я уже в поиске искал. но там выдаёт такое разбивание числа типа 6=5+1 или сумма чисел в массиве, а мне надо типа 605=6+0+5. Вся трудность в том, что я не знаю как применить свойство мода и дива для множества чисел я знаю, что чтобы получить например 2 из 123
нужно сделать (123 div 10) mod 10, но если у нас есть такое число — 1234, то ведь надо например для 1 делать просто div 1000, для 2 и див и мод ну и т.д.
Помогите или пошлите в пример плзСоставить программу нахождения среднего арифметического значения цифр заданного натурального числа N (1
end;
else writeln(‘neprav1ln1y argyment’);
readln;
end.Креветка присваивания :DDD
18.12.2005 2:34while n <> 0 do begin
s := s + (n mod 10);
n := n div 10;
end;18.12.2005 3:02
Группа: Пользователи
Сообщений: 111
Пол: Мужской
Реальное имя: РомаРепутация: 0
volvo
так а ведь если число например 9значное(123456789)
1 s:=0+23456789
n:=12345678
получается так например для 1го
а мне надо типа
1 s:=0+1
n:=2
2 s:=1+2
n:=3
типа это надо, или ты имееш ввиду както связать это с тем где находится количество цифр в числе?Креветка присваивания :DDD
18.12.2005 3:19Группа: Пользователи
Сообщений: 85
Пол: МужскойРепутация: 0
Составить программу нахождения среднего арифметического значения цифр заданного натурального числа N (1
Значит скажем так.
Есть у меня такая(ну, почти) работающая програма, но написано очень коряво, ибо давно и на тупую голову.
Если чо поймешь, то можешь взять с нее куски:program suma_cifr_4isel_ta_porivnyannya_sum;
var n1,s1,n2,s2:longint;
a1,a2:byte;
label xxx1, sp1, xxx2, sp2;
begin
writeln (‘Rozrahunok sum cifr dvoh 4isel ta porivnyannya’);
repeat
write (‘Vvedit» 4isla A,B (4erez probil) — ‘);
readln (n1,n2);
if (n1 <0) or (n2<0) then writeln ('Dani vvedeno nepravilno');
until (n1>=0) and (n2>=0);
s1:=0;
xxx1: begin
a1:=n1 mod 10;
s1:=s1+a1;
n1:=n1 div 10;
if n1>10 then goto xxx1;
if n1 sp1:
s1:=s1+n1;
writeln;
writeln(‘Suma cifr 4isla A = ‘,s1);
end;
s2:=0;
xxx2: begin
a2:=n2 mod 10;
s2:=s2+a2;
n2:=n2 div 10;
if n2>10 then goto xxx2;
if n2 sp2:
s2:=s2+n2;
writeln(‘Suma cifr 4isla B = ‘,s2);
end;
writeln;
write (‘ Porivnyannya:’);
if s1-s2 if s1-s2=0 then write (‘ A = B’) else
write (‘ A > B’);
readln
end.Главнгое чо хочу сказать, так это то что
while z>=10 do <'здесь идёт вычисление из скольки цифр состоит число'>
begin
z:=z div 10;
k:=k+1;
end;'здесь>по моему не правиьно организовано, см. мою прогу→ там я использу. mod 10 чтобы получить последнюю цифру числа.
-=еще раз извиняюсь за корявую програму- нету времени щас переделывать=-Как целое число разбить на отдельные цифры, и вывести их через запятую?
возможно как то через цикл for() и дальше записать в список и вывести его через split с запятой, но это будет много кода, как можно реализовать покороче?
Отслеживать
49.3k 17 17 золотых знаков 57 57 серебряных знаков 101 101 бронзовый знак
задан 3 дек 2020 в 10:08
833 1 1 золотой знак 11 11 серебряных знаков 32 32 бронзовых знака3 ответа 3
Сортировка: Сброс на вариант по умолчанию
Если надо просто вывести, то, используя ответ @S. Nick:
a = 987 print(*str(a), sep=',') # /\ Разделитель между элементами # /\ Приведение числа к строке # /\ Распаковка строки в отдельные символыЕсли же строку ‘9,8,7’ надо куда-то сохранить, то:
a = 987 result = ','.join(str(a)) # /\ Приводим число к строке # /\ Перебираем каждый символ строки # /\ Объединяем через запятуюРезультат, при необходимости, тоже можно вывести
print(result)Как разбить число на цифры в паскале
Всем привет. Я интересуюсь как например разложить число 153 -> на 1 5 3 по отдельности программным спопособм. Тоесть получить цифры из которых состоит число.
Меня интересует только сам математический алгоритм, но можно и пример на C or Pascal.
Вариант типо записать в строку, а потом выделить числа не принимается я ищу математический метод, который пока не могу придумать.
Регистрация: 09.01.2008
Сообщений: 26,229x mod 10 — вернёт последнюю цифру числа x
потом сдвигаем число, разделив его целочисленно на 10:
x := x div 10
повторяем, пока x > 0Serge_Bliznykov Посмотреть профиль Найти ещё сообщения от Serge_Bliznykov Форумчанин
Регистрация: 15.02.2008
Сообщений: 621Два способа получения отдельной цифры:
1. (не помню на паскале это актуально или нет =\) Нуу в общем переведи в строку число и дергай по символу =))), т.е. это так как наш мозг работает =)))
2. для получения i-ой цифры (m) в числе n:
m=(n mod (10 ^(i))) div (10 ^ (i-1))Помог? Ну так нажми на весы!