Функция без знака для возврата цифр с использованием любых чисел - PullRequest
0 голосов
/ 04 февраля 2019

Я работаю над упражнением, в котором мне нужно запрограммировать неподписанную функцию на C ++. --- Функция вернула число цифр в num и должна работать с любым числом.

The issue  --- when I do unsigned num is greater than 10 digits, it still 
shows 10 as the answer.  what am I doing wrong?


unsigned numDigits(unsigned num)  
{
if (num == 0)
return 0; 
return 1 + numDigits(num / 10); 
return (num);
}

int main()
{
unsigned num = 12345678901;
cout << "Number of Digits: " << numDigits(num);
}

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019
 unsigned getNumDigits(long long unsigned num)
 {
      if (num < 9 )
          return 1;
       return 1 + getNumDigits(num / 10 );
 }

@ ram, спасибо за указание.Максимальное гарантированное значение без знака составляет 65535.Для размещения значений, превышающих этот, потребуется больший тип размещения (значения, учитывающие стоимость).Максимальное значение без знака возможно с длинным длинным без знака.Значение 0 также означает 1 цифру, следовательно, сравнение с 9.

0 голосов
/ 04 февраля 2019

размер без знака:

0 to 65,535 or 
0 to 4,294,967,295 (10 digits)

Так что измените свою функцию на:

unsigned numDigits(long long unsigned num)

Чит-решение вашей проблемы также:

std::string dig = std::to_string(num);
std::cout << dig.size();
...