下面的代码用于计数在给定的十进制数字的数目。 问题是,它不计数超过10位。
int NumDigits(int n) {
int digits = 0;
if (n <= 0) {
n = -n;
++digits;
}
while (n) {
n /= 10;
++digits;
}
return digits;
}
下面的代码用于计数在给定的十进制数字的数目。 问题是,它不计数超过10位。
int NumDigits(int n) {
int digits = 0;
if (n <= 0) {
n = -n;
++digits;
}
while (n) {
n /= 10;
++digits;
}
return digits;
}
这似乎是你的工具链有一个32位的int
型。 在这样的类型表示的最大值是2 31 -1或2147483647。 正如你所看到的,这是一个10位数字。 你需要使用,如果你想使用这种算法,它支持更多数量的不同类型的。
这是一个32位整数,其具有2147483647的最大量。 您可能要考虑使用64位的整数或其他解决方案。
尽量长的参数类型。
乔纳森在他的评论中已经指出,int不能含有多于10位的数字。
其原因是,你的参数是int类型,它在尺寸有限的。 最有可能你的Int32(你可以用的sizeof(INT找出来),让你在字节大小),它上升到2147483647,然后溢出到负值-2147483648。
Example:
int i = 2147483647;
i = i+1;
printf("%d\n",i);
让你的输出:“-2147483648”