This program doesn't work properly for decimals more than 10 digits?

折月煮酒 提交于 2019-12-24 12:34:24

问题


The below code is used to count number of digit in a given decimal. The problem is that it doesn't count digits more than 10.

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

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

  return digits;
}

回答1:


It seems like your toolchain has a 32-bit int type. The maximum value representable in such a type is 231-1, or 2,147,483,647. As you can see, that's a 10-digit number. You'll need to use a different type that supports larger numbers if you want to use this kind of an algorithm.




回答2:


That's a 32 bit integer, which has a maximum amount of 2,147,483,647. You might want to look into using 64 bit integers or other solutions.




回答3:


Try long for the argument type.

As Jonathan already stated in his comment an int cannot contain a number with more than 10 digits.




回答4:


The reason is that your parameter is of the type int, which is limited in size. Most likely you have Int32 (you can find it out with sizeof(int) which gives you the size in byte) which goes up to 2147483647 and then overflows to the negative value -2147483648.

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

gives you the output: "-2147483648"



来源:https://stackoverflow.com/questions/28352242/this-program-doesnt-work-properly-for-decimals-more-than-10-digits

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!