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

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

  • автор:

Количество цифр

Время от времени перед программистом стает задача нахождения количества цифр в числе. Есть много способов решения этой задачи. В статье мы рассмотрим наиболее популярные из них.

Длина строки

Это очень простой вариант определения количества цифр, заключается в переводе числа в строковое представление с последующим определением длины строки.

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

Эксперт .NET

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 Посмотреть сообщение

Не могли бы пояснить в двух словах, почему?
Дико медленно.

Эксперт .NET

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

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

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