对于超过 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”