Количество цифр
Время от времени перед программистом стает задача нахождения количества цифр в числе. Есть много способов решения этой задачи. В статье мы рассмотрим наиболее популярные из них.
Длина строки
Это очень простой вариант определения количества цифр, заключается в переводе числа в строковое представление с последующим определением длины строки.
public int CountDigitByString(int n) < return Math.Abs(n).ToString().Length; >
Такой метод компактный и интуитивно понятный, однако он сильно проигрывает в быстродействии другим вариантам.
Десятичный логарифм
Использование десятичного логарифма для определения количества цифр в числе, позволяет производить вычисление за линейное время.
public int CountDigitsByLog10(int n) < return (n == 0) ? 1 : (int)Math.Log10(Math.Abs(n)) + 1; >
Сравнение
Самый быстрый из приведенных методов.
private static readonly int[] Numbers = new [] < 10, 100, 1000, 10000, 100000, 1000000, 10000000, 100000000, 1000000000 >; public int CountDigitsByCompare(int n) < n = Math.Abs(n); for (var i = 0; i < Numbers.Length; i++) < if (n < Numbers[i]) < return i + 1; > > return 10; >
Деление нацело
С использованием цикла
public int CountDigitsByDiv(int n) < var count = (n == 0) ? 1 : 0; while (n != 0) < n /= 10; count++; > return count; >
Рекурсивно
public int CountDigitsByDivRecursive(int n) < return (n 9) ? 1 : CountDigitsByDivRecursive(n / 10) + 1; >
Разбивка числа на отдельные цифры
Разбив число на отдельные цифры, мы получаем возможность нахождения:
- количества цифр;
- количества четных и нечетных;
- количества различных(уникальных) цифр числа;
- суммы цифр числа.
public Listint> IntToDigit(int n) < n = Math.Abs(n); var digits = new Listint>(); while (n > 0) < int digit = n % 10; n /= 10; digits.Add(digit); > return digits; >
Количество четных
public int EvenCount(int n) < var digits = IntToDigit(n); var count = 0; foreach (var d in digits) < if (d % 2 == 0) < count++; >> return count; > //сокращенная форма записи с использованием Linq public int EvenCountLinq(int n) < return IntToDigit(n).Count(x => x % 2 == 0); >
Количество нечетных
public int OddCount(int n) < var digits = IntToDigit(n); var count = 0; foreach (var d in digits) < if (d % 2 != 0) < count++; >> return count; > public int OddCountLinq(int n) < return IntToDigit(n).Count(x => x % 2 != 0); >
Количество различных цифр в числе
public int CountUniqueDigits(int n) < var a = new int[9]; foreach (var d in IntToDigit(n)) < a[d]++; >var countUnique = 0; foreach (var x in a) < if (x > 0) < countUnique++; >> return countUnique; >
Сумма цифр числа
public int SumDigits(int n) < var sum = 0; foreach (var d in IntToDigit(n)) < sum += d; >return sum; > //использование Linq сокращает запись public int SumDigitsLinq(int n) < return IntToDigit(n).Sum(); >
вычисление количества цифр целого введенного числа
Программа вычисляет количество цифр введенного числа. Вводим число (например 123), что же происходит дальше. Выражение num1/=10; делит число на 10 (123/10=12, дробная часть отбрасывается), произошла одна итерация, опять делит число на 10 (12/10=1, дробная часть отбрасывается), произошла вторая итерация. Опять делит число на 10 (1/10=0, дробная часть отбрасывается), произошла третья итерация. 0,1 не делит, так как переменная имеет целочисленный тип. Поэтому, на самом деле выводится не количество цифр, а количество итераций. Если ввести вещественное число (например 12,35), получится 47 итераций.
Посчитать количество цифр в числе
Помогите не могу никак разобратся!
нужно сщздать прогу.
Пользователь вводит с клавиатуры число — программа должна показать сколько в данном числе цифр. Число вводится целиком в одну переменную.
Лучшие ответы ( 2 )
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:
Посчитать количество четных и нечетных цифр в числе
Дано натуральное число N . С помощью операций деления нацело и взятия остатка от деления посчитать.

Вывести количество цифр в числе и сумму этих цифр
Натуральное число A, А<100, написать программу которая выводит количество цифр в этом числе и сумму.

Определить количество цифр в числе
Определить количество цифр в числе
Определить количество цифр в числе
Дано число К. Определить количество цифр в числе.
128 / 128 / 8
Регистрация: 24.11.2010
Сообщений: 237
что то не нашел я скрины!
Если пользователь вводит число в TextBox, то так
int Kolichestvo_cifr = textbox1.Text.Length;
374 / 135 / 19
Регистрация: 16.07.2010
Сообщений: 342
number.ToString().Length
![]()
17413 / 12809 / 3355
Регистрация: 17.09.2011
Сообщений: 21,086

Сообщение было отмечено как решение
Решение
int n = 123456789; int digitCount = (int)Math.Log10(n) + 1;
Никогда, ни в коем случае не работайте с числами через конвертирование их в строку.
Регистрация: 02.09.2009
Сообщений: 64
Сообщение от kolorotur 
Никогда, ни в коем случае не работайте с числами через конвертирование их в строку.
Не могли бы пояснить в двух словах, почему?
185 / 188 / 17
Регистрация: 26.11.2010
Сообщений: 511
Сообщение от nfsk_hedgehog 
Не могли бы пояснить в двух словах, почему?
Дико медленно.
![]()
17413 / 12809 / 3355
Регистрация: 17.09.2011
Сообщений: 21,086

Сообщение было отмечено Памирыч как решение
Решение
nfsk_hedgehog, во-первых, как вам сказали выше — это медленно.
Во-вторых, чисто технически глупо забивать кучу для тривиальных задач.
В-третьих, если это задание в школе или универе, то преподаватель наверняка хочет увидеть ваше умение работать с числами, а не строками.
А теперь самое главное. Строка — это отображение числа. А у отображения есть такое свойство, как формат. Который может быть разным в разных культурах (см. региональные настройки).
Например, число один миллион в некоторых культурах отображается как «1,000,000». В нем 7 чисел, но в строке, его отображающей, девять символов. В результате программа работает не правильно.
Будет весело, если вы разрабатываете какое-нибудь приложение для работы с финансами, напримнр.
@ WonderFlik
фанатизм какой то О_о имхо ToString().Length намного яснее и локаничнее, конечно если речь идет о каких то диких мат. вычеслениях с матрицами 100500х100500 стоит обращать на такие вещи внимание, а если это просто банальная необходимость узнать длину одного числа. int.ToString() всегда только цифры возвращает ну кроме случаев NaN
| Меню пользователя @ WonderFlik |
Найти количество цифр в числе
уважаемые эксперты подскажите в чем проблема. начал изучать язык С и надо было переписать программу которая встречалась в паскале с использованием рекурсии. Переписал, а что то видимо не так сделал. вот два кода подскажите пожалуйста в чем ошибка
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
uses crt; var m:integer; n:longint; function schet(n:longint; var m:integer):integer; begin if n div 10 = 0 then begin inc(m); schet:=m; end else begin n:=n div 10; inc(m); schet:=schet(n,m); end; end; procedure input_data(var n:longint); begin writeln('Введите число:'); readln(n); end; procedure output_data(schet:integer); begin writeln('Количество цифр в введенном вами числе: ', schet); readkey; end; begin clrscr; writeln('Данная программа считает количество цифр в введенном пользователем числе.'); input_data(n); output_data(schet(n,m)); end.
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
#include #include int schet(int n, int m) { if((n%10)==0) { m++; schet==m; } else { n=n%10; m++; schet==schet(n,m); } return schet; }; void main() { clrscr(); int n,m; printf("Введите число: "); scanf("%d", &n); schet(n,m); printf("Количество цифр в введенном вами числе: %d", schet); getch(); }