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

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

  • автор:

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

Я хотел бы, чтобы для каждого числа были отдельные элементы. Строка могла бы быть отдельной или даже отдельной цифрой.

Есть ли перегрузка для этого в методе.Split?

Поделиться Источник 26 января 2011 в 18:48

6 ответов

Я бы использовал модули и цикл.

int[] GetIntArray(int num) < ListlistOfInts = new List(); while(num > 0) < listOfInts.Add(num % 10); num = num / 10; >listOfInts.Reverse(); return listOfInts.ToArray(); > 

Поделиться 26 января 2011 в 19:09

Что-то вроде этого будет работать, используя Linq:

string result = "12345" var intList = result.Select(digit => int.Parse(digit.ToString())); 

Это даст вам список IEnumerable из целых чисел.

Если вы хотите IEnumerable из строк:

var intList = result.Select(digit => digit.ToString()); 

или если вы хотите список строк:

var intList = result.ToList(); 

Поделиться 26 января 2011 в 18:51

Ну, строка является IEnumerable и также реализует индексатор, поэтому вы можете перебирать его или ссылаться на каждый символ в строке по индексу.

Самый быстрый способ получить то, что вам нужно, вероятно, это метод ToCharArray() строки:

var myString = "12345"; var charArray = myString.ToCharArray(); //

Затем вы можете преобразовать каждый символ в строку или разобрать их в байты или целые числа. Вот способ Linq-y сделать это:

byte[] byteArray = myString.ToCharArray().Select(c=>byte.Parse(c.ToString())).ToArray(); 

Немного более производительный, если вы используете строки ASCII/Unicode:

byte[] byteArray = myString.ToCharArray().Select(c=>(byte)c - 30).ToArray(); 

Этот код будет работать только в том случае, если вы уверены, что каждый элемент является числом; в противном случае разбор вызовет исключение. Простой Regex, который подтвердит, что это правда, — это «^\d+$» (соответствует целой строке, состоящей из одного или нескольких символов цифры), используемый в статическом методе Regex.IsMatch().

Поделиться 26 января 2011 в 18:52

Вы можете просто сделать:

"123456".Select(q => new string(q,1)).ToArray(); 

чтобы иметь перечислимое число целых чисел, согласно запросу на комментарий, вы можете:

"123456".Select(q => int.Parse(new string(q,1))).ToArray(); 

Это немного слабый, так как предполагает, что строка на самом деле содержит числа.

Поделиться 26 января 2011 в 18:57

Вот некоторый код, который может вам помочь. Строки могут быть обработаны как массив символов

string numbers = "12345"; int[] intArray = new int[numbers.Length]; for (int i=0; i

Поделиться 26 января 2011 в 18:52

Методы Substring и Join можно использовать для этого выражения.

string no = "12345"; string [] numberArray = new string[no.Length]; int counter = 0; for (int i = 0; i < no.Length; i++) < numberArray[i] = no.Substring(counter, 1); // 1 is split length counter++; >Console.WriteLine(string.Join(" ", numberArray)); //output >>> 0 1 2 3 4 5 

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

Входные данные: Дано число N, вывести через пробел все его цифры. Нельзя использовать массивы и готовых функцию. Моё решение: Пытался реализовать таким образом, но к сожалению числа выводятся задом наперёд.

#include using namespace std; int main() < int num; cin >> num; int first_copy = num, sec_copy = num; int digit_first; while (first_copy != 0) < digit_first = first_copy % 10; first_copy = first_copy / 10; cout cout

Пример: На вход дано 20718, необходимо вывести 2 0 7 1 8.
Отслеживать
8,602 4 4 золотых знака 30 30 серебряных знаков 53 53 бронзовых знака
задан 18 сен 2022 в 14:48
118 1 1 золотой знак 3 3 серебряных знака 18 18 бронзовых знаков
Да мало ли. Стек, рекурсия.
18 сен 2022 в 14:51
Есть решение с ещё одной целой переменной.
18 сен 2022 в 21:08

@StanislavVolodarskiy Конечно. Как всегда, вопрос только в том, за счет чего решать задачу — за счет памяти или времени :)

19 сен 2022 в 5:35

4 ответа 4

Сортировка: Сброс на вариант по умолчанию

Отыщем последнюю степень десятки, которая не больше заданного числа - ten . Разделим заданное число на него - получится старшая цифра. Заданное число заменим на остаток. Разделим ten на десять, повторим пока ten не обнулится. Дополнительная память - одна целая переменная, никаких массивов, стеков, строк, рекурсий.

Код работает для неотрицательных чисел:

#include int main() < int num; std::cin >> num; int ten; for (ten = 1; ten for (; ten > 0; ten /= 10) < std::cout std::cout
$ g++ -std=c++17 -pedantic -Wall -Wextra -Werror temp.cpp $ echo 20718 | ./a.out 2 0 7 1 8 

Разбивание числа на цифры

Author24 — интернет-сервис помощи студентам

Доброго всем. Задача из учебника Дейтела. Скажу сразу, изучаю Си самостоятельно(не учебное заведение). С задачей справился, но есть вопрос. В начале, введенное четырехзначное число нужно разбить на отдельные цифры используя деление и взятие по модулю. Я додумался до способа который привел в коде. Понимаю, что можно еще преобразовать введенное число в строку и тоже вывести цифры по отдельности. А есть ли еще какие нибудь способы разбить число на отдельные цифры кроме перечисленных мной? а то много задач встречается с таким вопросом.

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; }

Заранее благодарю.

Разбить число на цифры

Author24 — интернет-сервис помощи студентам

не совсем понимаю, что это за ошибки такие, объясните пожалуйста.

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
#include int figlen (int x) { int k; k=0; do { x=x/10; ++k; } while (x!=0); return k; } void desintegrate (int x, int t_a[15]){ int i, l; int dgt; dgt=0; i=0; l=figlen(x); do { dgt=x%10; scanf("%d", t_a[l-i]); x=x/10; ++i; } while (x!=0); } int main(){ printf("Put some number;"); int i=0, x=0, tarr[15]={0}; scanf("%d", &x); desintegrate(x, tarr[15]); for (; ifiglen(x); ++i) printf ("%d ", &tarr[i]); return 0; }

лог ошибок:
32 C:\Users\Anwar\Desktop\programming\C\12.cpp invalid conversion from `int' to `int*'
32 C:\Users\Anwar\Desktop\programming\C\12.cpp initializing argument 2 of `void desintegrate(int, int*)'

Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Разбить число на цифры
Как в си использовать div и mod, а то они вместе как то не работают, мне нужно разбить число на.

Разбить число произвольной длины на цифры
подскажите цикл ,который разбивает числа любой длины на цифры ,не могу придумать(

Как разбить число на цифры и вывести в консоль без массивов?
Подскажите алгоритм.

Разбить строку на цифры
Есть char-последовательность цифр.Пример:126456541324987. Длина от 1 цифры до 200. Как перевести.

118 / 110 / 78
Регистрация: 30.01.2013
Сообщений: 297
Попробуйте сосчитать число как строку, потом можно посимвольно выводить )
Регистрация: 22.01.2013
Сообщений: 59
э, нет. нам сказали, что в строку переводить не желательно (читать "нельзя").
так в чём суть ошибки?
2473 / 1684 / 135
Регистрация: 14.05.2009
Сообщений: 7,162

ЦитатаСообщение от Dummy_1 Посмотреть сообщение

desintegrate(x, tarr[15]);
должно быть

desintegrate(x, tarr);

ЦитатаСообщение от Dummy_1 Посмотреть сообщение

это объявление массива int на 15 элементов

ЦитатаСообщение от Dummy_1 Посмотреть сообщение

desintegrate(x, tarr[15]);
передача 16-го элемента массива
Регистрация: 30.01.2013
Сообщений: 99

1) На строке 32, Вы вызываете функцию и пытаетесь передать ей в качестве аргументов x и 15-й элемент массива (который, кстати, не существует).
Если Вы хотите передать функции весь массив, то вызов функции (на 32-й строке) надо написать так:

desintegrate(x, tarr);

2) На строке 12, надо написать вот так:

void desintegrate (int x, int t_a[])
void desintegrate (int x, int *t_a)

3) И еще совет. Переменные можно сразу инициализировать при их объявлении. Если быть конкретным, то вместо:

1 2 3
int i; int dgt; dgt=0; i=0;

Можно написать так:

int i=0, dgt=0;

Советую Вам прочесть статью по этому адресу: http://dvo.sut.ru/libr/cvti/i618buz/10.htm
Если усвоите весь материал, то вопросов у Вас больше быть не должно.

Добавлено через 1 час 34 минуты
В функции desintegrate у тебя вообще что-то неведомое творится)
Переменная dgt нигде не используется, и почему-то второй раз вызывается функция scanf

В общем, вот рабочий код:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
#include int main(void) { int long number; // введенное число int i=0; // индекс int tarr[15] = {0}; // массив уже разделенных чисел scanf("%d", &number); // запрашиваем число, например 12345 while(number!=0) { tarr[i] = number%10; // вычисляем остаток от деления, получаем 5 и сохраняем его в массив ++i; number /= 10; // делим наше число на 10 и получаем 1234. При след. цикле уже работаем с ним } // можно записать и как number = number/10; for(; i!=0; --i) // выводим все цифры в обратном порядке printf("%d ", tarr[i-1]); return 0; }

Да, и еще. У тебя исходник сохранен в формате *.cpp Этот формат для C++, соответственно компилироваться он будет как C++ программа. Сохраняй исходники в формате *.c

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

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