对于超过10位的小数,此程序无法正常工作?

时间:2015-02-05 19:19:10

标签: c decimal digits

以下代码用于计算给定小数中的位数。问题是它不会计算超过10的数字。

int NumDigits(int n) {
  int digits = 0;
  if (n <= 0) {
    n = -n;
    ++digits;
  }

  while (n) {
    n /= 10;
    ++digits;
  }

  return digits;
}

4 个答案:

答案 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;