Как разбить число на цифры в паскале
Перейти к содержимому

Как разбить число на цифры в паскале

  • автор:

Как разделить число на цифры?

Например, дано число 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:34

      while 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,229

      x mod 10 — вернёт последнюю цифру числа x
      потом сдвигаем число, разделив его целочисленно на 10:
      x := x div 10
      повторяем, пока x > 0

      Serge_Bliznykov
      Посмотреть профиль
      Найти ещё сообщения от Serge_Bliznykov

      Форумчанин
      Регистрация: 15.02.2008
      Сообщений: 621

      Два способа получения отдельной цифры:
      1. (не помню на паскале это актуально или нет =\) Нуу в общем переведи в строку число и дергай по символу =))), т.е. это так как наш мозг работает =)))
      2. для получения i-ой цифры (m) в числе n:
      m=(n mod (10 ^(i))) div (10 ^ (i-1))

      Помог? Ну так нажми на весы!

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *