以下代码用于计算给定小数中的位数。问题是它不会计算超过10的数字。
int NumDigits(int n) {
int digits = 0;
if (n <= 0) {
n = -n;
++digits;
}
while (n) {
n /= 10;
++digits;
}
return digits;
}
答案 0 :(得分:3)
您的工具链似乎有32位int
类型。在这种类型中可表示的最大值是 2 31 -1 ,或2,147,483,647。如您所见,这是一个10位数字。如果要使用这种算法,则需要使用支持更大数字的其他类型。
答案 1 :(得分:3)
这是一个32位整数,最大值为2,147,483,647。您可能希望研究使用64位整数或其他解决方案。
答案 2 :(得分:1)
尝试使用 long 作为参数类型。
正如Jonathan在评论中所说,int不能包含超过10位的数字。
答案 3 :(得分:1)
原因是您的参数属于int类型,其大小有限。 很可能你有Int32(你可以用sizeof(int)找到它,它给你的字节大小),它上升到2147483647,然后溢出到负值-2147483648。
Example:
int i = 2147483647;
i = i+1;
printf("%d\n",i);
为您提供输出:&#34; -2147483648&#34;