2016-10-03 2 views
-9

Может кто-нибудь помочь мне разобраться в том, что мне учил ИТ-учитель? Мне нужно сделать программу, которая вычисляет количество цифр в числе. Например:Получите длину числа, используя только модуль

I ввести номер 100, а программа дает мне выход 3. Если я вход 99, программа дает мне 2.

Как я могу добиться этого только с помощью модуля (%) и ничего другого, кроме математических вычислений.

+0

'log' это математический расчет. – krzaq

+1

Что вы попробовали? SO не является службой записи кода. Пожалуйста, прочитайте [какие вопросы я могу задать здесь?] (Http://stackoverflow.com/help/on-topic) – user463035818

+0

Это довольно надуманно. Почему вы не можете использовать повторное целочисленное деление на 10 и остановиться, как только число равно нулю? – Bathsheba

ответ

0

Я думаю, что ваш учитель сделал небольшой щелчок языка. Вы можете сделать это тривиально, используя целочисленное делениене модуль:

А как вы можете решить это

int digits; 
for (digits = 1; num /= 10; ++digits); 

где num является неотрицательным целым числом, чтобы проверить. Как вы можете видеть, вам не нужно использовать модуль %. Даже если вы используете свойство a % b = a - a/b * b (для целых неотрицательных чисел a и b), похоже, что вы можете заменить деление на %, вы все равно получите коэффициент в перестроенной формуле.

+0

Это можно сделать только с модулем и добавлением. –

2
uint num=/* your input */; 

// that's the number of digits required to print 
// num in base 10; 
uint ceil_log10 = 1; 
for(uint i = 10; num > 10; i = i*10) { 
    num -= (num % i); 
    ceil_log10++; 
} 

Любое число < 10 нуждается в одной цифре.

Любое число >= 10 вводит цикл, который исключает цифры от наименьшей до самой значащей цифры (с использованием модуля) до тех пор, пока ничего не останется.

Если вы не можете использовать умножение, вы можете заменить его повторными добавлениями:

uint num=/* your input */; 

// that's the number of digits required to print 
// num in base 10; 
uint ceil_log10 = 1; 
for(uint i = 10; num > 10; /* no multiplication 4 you!! i = i*10 */) { 
    num -= (num % i); 
    ceil_log10++; 

    uint nextPower10=i; 
    for(int j=0; j<9; j++) { 
    nextPower10+=i; 
    } 
    i=nextPower10; 
} 
+0

Да, это хорошо. Upvoted. – Bathsheba

+0

, если вы не можете использовать умножение, почему вы предполагаете, что можете использовать дополнение? В любом случае вопрос неясен, так как «математические вычисления» включают любые мыслимые вычисления. – naomik

Смежные вопросы