Как разбить целое число на его цифры?
Как я могу разделить int в С++ на его отдельные числа? Например, я хотел бы разделить 23 на 2 и 3.
Ответы (14)
Учитывая число 12345 :
5 is 12345 % 10
4 is 12345 / 10 % 10
3 is 12345 / 100 % 10
2 is 12345 / 1000 % 10
1 is 12345 / 10000 % 10
Я не буду приводить полный код, так как это, безусловно, выглядит как домашнее задание, но я уверен, что вы уловили шаблон.
Извлекатель цифр в обратном порядке (например, для 23 будет 3 и 2):
Экстрактор цифр нормального порядка (например, для 23 будет 2 и 3):
Простым ответом на этот вопрос может быть:
- Прочитать число «n» от пользователя.
- Используя цикл while, убедитесь, что он не равен нулю.
- Возьмите модуль 10 числа «n». Это даст вам его последнюю цифру.
- Затем разделите число «n» на 10. Это удалит последнюю цифру числа «n», поскольку в int десятичная часть опущена.
- Отображение числа.
Я думаю, это поможет. Я использовал простой код, например:
привести его к строке или char[] и зациклить на нем
классический трюк заключается в использовании по модулю 10: x%10 дает вам первую цифру (т.е. цифру единиц). Для других вам нужно сначала разделить (как уже показано во многих других сообщениях)
Вот небольшая функция для преобразования всех цифр в вектор (это то, что вы, похоже, хотите сделать):
Объявите массив и сохраните отдельные цифры в массиве, подобном этому
Я думаю, что это самый простой способ.
Нам нужно использовать функцию std::to_string() для преобразования нашего int в строку, чтобы она автоматически создавала массив с нашими цифрами. Мы можем получить к ним доступ, просто используя индекс — nstr[0] покажет 1;
Начните с наибольшей степени десяти, которая соответствует int на вашей платформе (для 32-битных int : 1.000.000.000), и выполните целочисленное деление на нее. Результат — крайняя левая цифра. Вычтите этот результат, умноженный на делитель, из исходного числа, затем продолжите ту же игру со следующей меньшей степенью десяти и повторяйте, пока не достигнете 1.
Вы можете просто использовать последовательность операций x/10.0f и std::floor, чтобы иметь «математический подход». Или вы также можете использовать boost::lexical_cast(the_number) для получения строки, а затем вы можете просто выполнить the_string.c_str()[i] для доступа к отдельным символам («строковый подход»).
Я не обязательно рекомендую это (более эффективно работать с числом, а не преобразовывать его в строку), но это просто и работает 🙂
Теперь вы можете получить доступ к каждой цифре через s[0] , s[1] и т. д.
Как разделить число на цифры?
Например, дано число 123456789, нужно разделить его на отдельные цифры, 1, 2, 3, 4, 5, 6, 7, 8, 9, чтобы их потом можно было бы присвоить к какой-то переменной. И как называется сам этот процесс, чтобы поподробнее прочитать про эту функцию потом.
12 ответов 12
Если честно, то мне трудно понять смысл этих строчек:
Вот тут я запутываюсь, а точнее в форматах ( % ).
Кратко описываю непонятные Вам места с форматами. Подробно можно прочитать в 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 (искомую цифру) «как есть».
Надеюсь, теперь стало понятнее. А вообще, читайте, читайте и еще раз читайте документацию.
Разбить число на цифры
Ну можно немножко посидеть и такое запилить, но задача была четкая, 3хзначное число, разложить на 3 отдельных, задача выполнена, выдумывать что-то не собираюсь. Завтра может попробую.
Вот, на любое целое или дробное, отрицательное или неотрицательное число
// Разбиение числа на цифры
Slonopotam, ты решал задачу, исходя из некорректно понятого условия. Изначально было написано: Помогите разбить 3 значное число на цифры. Число! Т.е. предполагается, что число существует уже в виде экземпляра числового типа (int, double и родственные типы), а не в виде строки символов.
(1) Не стоит хардкодить коды цифр и знаков. Например:
в другой кодовой таблице этим кодам могут соответствовать совсем другие символы. Более переносимый вариант:
(Полностью переносимый вариант — это сравнение с каждой из цифр в отдельности, поскольку теоретически возможны кодовые таблицы, в которых цифры не идут единым блоком. Но я с такой экзотикой не встречался. А вот с буквами национальных алфавитов такое встречается очень часто.)
(2) С десятичным разделителем всё ещё веселее. Правильным было бы запрашивать у операционной системы какой символ используется для десятичного разделителя в локали, действующей в момент запуска программы.
(3) В программе не учитывается возможность ввода чисел в «научной» форме. Например, .758e2 — это 75.8 . Подробности см. в википедии.
Как разбить число на отдельные цифры в C #? [Дубликат]
Мне нужны отдельные элементы для каждого номера. Строка будет делать или даже индивидуальный номер.
Есть ли у метода .Split перегрузка для этого?
6 ответов
Я бы использовал модуль и цикл.
Что-то вроде этого будет работать, используя Linq:
Это даст вам список индексов IEnumerable.
Если вы хотите IEnumerable строк:
Ну, строка является IEnumerable и также реализует индекс, поэтому вы можете перебирать ее или ссылаться на каждый символ в строке по индексу.
Самый быстрый способ получить то, что вам нужно, — это, вероятно, метод ToCharArray() для String:
Затем вы можете преобразовать каждый Char в строку или проанализировать их в байтах или целых числах. Здесь Linq-y способ сделать это:
