Я работаю над упражнением, в котором мне нужно запрограммировать неподписанную функцию на 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); }
unsigned getNumDigits(long long unsigned num) { if (num < 9 ) return 1; return 1 + getNumDigits(num / 10 ); }
@ ram, спасибо за указание.Максимальное гарантированное значение без знака составляет 65535.Для размещения значений, превышающих этот, потребуется больший тип размещения (значения, учитывающие стоимость).Максимальное значение без знака возможно с длинным длинным без знака.Значение 0 также означает 1 цифру, следовательно, сравнение с 9.
размер без знака:
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();