对于超过 10 位的小数,这个程序不能正常工作?
This program doesn't work properly for decimals more than 10 digits?
下面的代码用于计算给定小数中的位数。问题是它不会计算超过 10 位的数字。
int NumDigits(int n) {
int digits = 0;
if (n <= 0) {
n = -n;
++digits;
}
while (n) {
n /= 10;
++digits;
}
return digits;
}
您的工具链似乎是 32 位 int
类型。这种类型中可表示的最大值是 231-1,即 2,147,483,647。如您所见,这是一个 10 位数字。如果你想使用这种算法,你需要使用支持更大数字的不同类型。
这是一个 32 位整数,最大数量为 2,147,483,647。您可能想研究使用 64 位整数或其他解决方案。
尝试 long 作为参数类型。
正如 Jonathan 在他的评论中所说的那样,int 不能包含超过 10 位的数字。
原因是你的参数是int类型,有大小限制。
很可能你有 Int32(你可以用 sizeof(int) 找到它,它以字节为单位给出大小)它上升到 2147483647,然后溢出到负值 -2147483648。
Example:
int i = 2147483647;
i = i+1;
printf("%d\n",i);
给你输出:“-2147483648”
下面的代码用于计算给定小数中的位数。问题是它不会计算超过 10 位的数字。
int NumDigits(int n) {
int digits = 0;
if (n <= 0) {
n = -n;
++digits;
}
while (n) {
n /= 10;
++digits;
}
return digits;
}
您的工具链似乎是 32 位 int
类型。这种类型中可表示的最大值是 231-1,即 2,147,483,647。如您所见,这是一个 10 位数字。如果你想使用这种算法,你需要使用支持更大数字的不同类型。
这是一个 32 位整数,最大数量为 2,147,483,647。您可能想研究使用 64 位整数或其他解决方案。
尝试 long 作为参数类型。
正如 Jonathan 在他的评论中所说的那样,int 不能包含超过 10 位的数字。
原因是你的参数是int类型,有大小限制。 很可能你有 Int32(你可以用 sizeof(int) 找到它,它以字节为单位给出大小)它上升到 2147483647,然后溢出到负值 -2147483648。
Example:
int i = 2147483647;
i = i+1;
printf("%d\n",i);
给你输出:“-2147483648”