Сообщение от GetHelp
тоже самое что n = n / 10;
Не совсем. Результат тот же, но /= — не сокращение, а одна операция, деление и последующее присваивание — две через временную (ударение на первую гласную) вспомогательную величину. На интеле так и так будет создана временная величина, хранимая в регистре общего назначения до использования в операторе присваивания, но в принципе
означает вариант, когда её существование предусмотрено исходником, а в
временная величина — хвост особенностей системы команд. Поэтому если n уже находится в регистре, но дальнейшая оптимизация не выполнена, то
даст копирование n в другой регистр, потом
и копирование этого регистра назад. А в худшем случае можно затеять ещё и возню с промежуточным сохранением частного в буфер в кэше/оперативе. Качественная оптимизация есть оптимизация до
, тогда если n уже находится в регистре, то временная величина вообще не будет создана. В других системах команд могло бы быть и иначе.
Описание задачи
Программа принимает число и выводит количество цифр в нем.
Решение задачи
- Берем значение целого числа и записываем его в переменную.
- Используем цикл
whileи при помощи оператора целочисленного деления «уничтожаем» каждую цифру числа начиная с последней, а при каждой итерации цикла специально созданную переменную (так называемый счетчик цикла) увеличиваем на единицу. После того как введенное в начале число станет равным 0, цикл прекратит свою работу. - Выводим значение этого счетчика на экран.
- Конец.
Исходный код
Ниже дан исходный код для подсчета количества цифр в данном числе. Результаты работы программы также даны ниже.
n = int(input("Введите число:"))
count = 0
while(n > 0):
count = count + 1
n = n // 10
print("Количество цифр равно:", count)
Объяснение работы программы
- Записываем введенное пользователем число в переменную
n. - Задаем переменную
countи инициируем ее значением 0. - Используем цикл
whileи при помощи оператора целочисленного деления «уничтожаем» каждую цифру числа начиная с конца. - При каждой итерации цикла переменная
countувеличивается на 1. - Как только цифры в числе заканчиваются и число
nстановится равным 0, цикл прекращает свою работу. - Выводим переменную
countна экран.
Результаты работы программы
Пример 1: Введите число:123 Количество цифр равно: 3 Пример 2: Введите число:1892 Количество цифр равно: 4
Примечание переводчика
Надо заметить, что опять эту задачу можно решить намного короче, если использовать методы строк.
print("Количество цифр равно:", len(input("Введите число:")))
Здесь введенное число принимается как строка и мы просто выводим ее длину.
Мой код проходит по всем тестам на 90%, не проходит один тест.
Проблему почему не проходит на все 100 — не нашёл..
Условие: Найти количество цифр заданного целого числа number.
Пример: вводим число 37 должно вывести число 2.
Код:
#include <iostream>
int main() {
long long int number = 0;
int result = 0;
std::cin >> number;
while(number != 0) {
number /= 10;
result++;
}
std::cout << result << "n";
}
insolor
45.6k16 золотых знаков54 серебряных знака95 бронзовых знаков
6
Почти наверняка в том единственном тесте вводится 0.
Делать условие именно на то, что юзер введёт цифру 0, и нужно вывести 1. Както колхозно, как можно реализовать без етого?
Делать отдельно условие нормально, но если есть желание сделать без условия, то можно и без него:
cin >> number;
int result = 1;
while (number /= 10) ++result;
cout << result;
ответ дан 5 мар 2022 в 10:17
Qwertiy♦Qwertiy
121k24 золотых знака121 серебряный знак291 бронзовый знак
3
Если вводите с консоли, то и не нужно рассматривать последовательность цифр как число. Можно просто читать и «выбрасывать» символы_цифры, с увеличением счетчика:
int res{};
while (isdigit(getchar())) ++res;
printf("%d", res);
Вариантов решения много.
Задание должно четко выразить что критично и каким образом задается объект. Потому что «задано число» наталкивает написать функцию с целочисленным аргументом, а пример рождает вопрос «откуда вводится?»…
ответ дан 5 мар 2022 в 10:23
AR HovsepyanAR Hovsepyan
15.8k3 золотых знака13 серебряных знаков30 бронзовых знаков
2
Узнай цену своей работы
Формулировка задачи:
Написать программу определения количества цифр в заданном натуральном числе.
Помогите пожалуйста
Код к задаче: «Найти количество цифр в натуральном числе»
textual
Листинг программы
var a:longint; n:integer; begin readln(a); n:=0; while a>0 do begin a:=a div 10; inc(n); end; writeln(n); end.
Полезно ли:
15 голосов , оценка 4.067 из 5
Похожие ответы
- Найти произведение чётных делителей натурального числа
- Определить наибольшую цифру введенного натурального числа
- Определить количество трехзначных чисел, сумма цифр которых простое число
- Функция, определяющая количество значащих цифр в записи числа
- Составить из имеющихся цифр максимально возможное число
- Составить из имеющихся цифр максимально возможное число
- Массив: Найти количество одинаковых значений в массиве.
- В целочисленном массиве найти первое с конца нечётное число
- Найти натуральные числа, меньшие чем MAXINT, такие , что они равны сумме факториалов цифр, из которых состоят
- В натуральном числе n поменять местами порядок цифр для получения наибольшего числа
- Найти произведение и количество всех целых чисел, расположенных между двумя заданными числами
Способы найти количество цифр в числе -13
Алгоритмы, JAVA
Рекомендация: подборка платных и бесплатных курсов Java — https://katalog-kursov.ru/
С большой вероятностью можно предположить, что у каждого программиста была хоть раз такая задача. Есть много способов для нахождения количества цифр. В статье будут представлены несколько функций от самых банальных, и не очень.
1. Длина строки
Довольно банальный способ это нахождение длины строки. Это не самый быстрый способ, но для очень простых задач подходит.
public int getCountsOfDigits(long number) {
return String.valueOf(Math.abs(number)).length();
}
2. Цикл с делением
Распространенный способ, скорость которого линейно зависит от длинный числа.
public int getCountsOfDigits(long number) {
int count = (number == 0) ? 1 : 0;
while (number != 0) {
count++;
number /= 10;
}
return count;
}
3. Десятичный логарифм и округление
Логарифм работает за константное время, преимущество которого на больших числах.
public static int getCountsOfDigits(long number) {
return(number == 0) ? 1 : (int) Math.ceil(Math.log10(Math.abs(number) + 0.5));
}
Можно использовать не только Math.ceil, это лишь один из вариантов использования логарифма.
4. Сравнение
Быстрый, но не практичный способ из-за количества кода только для int ушло 38 строк. Конечно найдутся умельцы которые смогут сделать красивее, и понятней. Не буду оставлять код для long, а оставлю для int, но думаю принцип ясен.
Код
public static int getCountsOfDigits(int n) {
if (n < 100000) {
if (n < 100) {
if (n < 10) {
return 1;
} else {
return 2;
}
} else {
if (n < 1000) {
return 3;
} else {
if (n < 10000) {
return 4;
} else {
return 5;
}
}
}
} else {
if (n < 10000000) {
if (n < 1000000) {
return 6;
} else {
return 7;
}
} else {
if (n < 100000000) {
return 8;
} else {
if (n < 1000000000) {
return 9;
} else {
return 10;
}
}
}
}
}
Рейтинг выглядит так:
1. Сравнения (показывают лучший результат)
2. Логарифм
3. Деление
4. String (наихудший результат)

