这个程序不为小数超过10位以上正常工作?(This program doesn't work

2019-10-21 18:50发布

下面的代码用于计数在给定的十进制数字的数目。 问题是,它不计数超过10位。

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

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

  return digits;
}

Answer 1:

这似乎是你的工具链有一个32位的int型。 在这样的类型表示的最大值是2 31 -1或2147483647。 正如你所看到的,这是一个10位数字。 你需要使用,如果你想使用这种算法,它支持更多数量的不同类型的。



Answer 2:

这是一个32位整数,其具有2147483647的最大量。 您可能要考虑使用64位的整数或其他解决方案。



Answer 3:

尽量的参数类型。

乔纳森在他的评论中已经指出,int不能含有多于10位的数字。



Answer 4:

其原因是,你的参数是int类型,它在尺寸有限的。 最有可能你的Int32(你可以用的sizeof(INT找出来),让你在字节大小),它上升到2147483647,然后溢出到负值-2147483648。

Example: 
int i = 2147483647;
i = i+1;
printf("%d\n",i);

让你的输出:“-2147483648”



文章来源: This program doesn't work properly for decimals more than 10 digits?
标签: c decimal digits