繁体   English   中英

对于十位数以上的十进制,此程序无法正常工作?

[英]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类型。 这种类型可表示的最大值是2 31 -1或2,147,483,647。 如您所见,这是一个10位数字。 如果要使用这种算法,则需要使用支持更大数字的其他类型。

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

尝试长时间输入参数类型。

正如乔纳森(Jonathan)在其评论中已经指出的,一个int不能包含超过10位数字的数字。

原因是您的参数属于int类型,其大小受到限制。 您最有可能拥有Int32(您可以使用sizeof(int)找出它,以字节为单位的大小),该值上升到2147483647,然后溢出到负值-2147483648。

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

给您输出:“ -2147483648”

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM