Приведенный ниже код используется для подсчета числа цифр в данном десятичном разряде. Проблема в том, что он не подсчитывает цифры более 10.
int NumDigits(int n) { int digits = 0; if (n <= 0) { n = -n; ++digits; } while (n) { n /= 10; ++digits; } return digits; }
Кажется, что ваш toolchain имеет 32-битный тип int
. Максимальное значение, представляемое в таком типе, равно 2 31 -1 или 2 147 483 647. Как вы можете видеть, это 10-значное число. Вам нужно будет использовать другой тип, который поддерживает большие числа, если вы хотите использовать этот тип алгоритма.
Это 32-битное целое число, которое имеет максимальную сумму в 2,147,483,647. Возможно, вы захотите изучить использование 64-битных целых чисел или других решений.
Попробуйте использовать тип аргумента.
Как уже отмечал Джонатан в своем комментарии, int не может содержать число с более чем 10 цифрами.
Причина в том, что ваш параметр имеет тип int, который ограничен по размеру. Скорее всего у вас есть Int32 (вы можете найти его с sizeof (int), который дает размер в байте), который идет до 2147483647, а затем переполняется до отрицательного значения -2147483648.
Example: int i = 2147483647; i = i+1; printf("%d\n",i);
дает вам выход: «-2147483648»