这个小程序,错在哪里?该如何解决
这个小程序,错在哪里?
我是新手,刚开始学C,主要是想用C做一些竞赛题。
题目是:输入一个不超过10的9次方的正整数,输出它的位数。例如12735的位数是5.请不要使用任何数学函数,只用四则运算和循环语句实现。
下面是我的代码:
我建立了一个in.txt,当里面的内容是1234567时,out.txt输出7,很正确,但是我写成12345678910,它就输出10,少了一位!我写成1234567891011,它还是输出10!
请问这是怎么回事?
谢谢!
------解决方案--------------------
12345678910 是否超过了long的上限?
------解决方案--------------------
long int 最大范围为:2147483647,即使unsigned long的范围也仅到:4294967295
------解决方案--------------------
unsigned long 上限2的32次方减1,相当于4294967295,只有10位,
你这样做当然只会输出10啦
------解决方案--------------------
用long long 可以保存64位二进制的数字
------解决方案--------------------
整形数中long int和int是一样的,对于32位的计算机,都是一个计算机位,即32位,最大的也就2的31次方减1,就算unsigned也才2的32次方减1,十进制最大4乘以10的9次方罢了,所以不能有11位,最大10.
我是新手,刚开始学C,主要是想用C做一些竞赛题。
题目是:输入一个不超过10的9次方的正整数,输出它的位数。例如12735的位数是5.请不要使用任何数学函数,只用四则运算和循环语句实现。
下面是我的代码:
- C/C++ code
#include <stdio.h> int main(){ freopen("in.txt","r",stdin); freopen("out.txt","w",stdout); unsigned long n = 0; int count = 1; scanf("%d",&n); while((n /= 10) >= 1){ count++; } printf("%d",count); return 0; }
我建立了一个in.txt,当里面的内容是1234567时,out.txt输出7,很正确,但是我写成12345678910,它就输出10,少了一位!我写成1234567891011,它还是输出10!
请问这是怎么回事?
谢谢!
------解决方案--------------------
12345678910 是否超过了long的上限?
------解决方案--------------------
long int 最大范围为:2147483647,即使unsigned long的范围也仅到:4294967295
------解决方案--------------------
unsigned long 上限2的32次方减1,相当于4294967295,只有10位,
你这样做当然只会输出10啦
------解决方案--------------------
用long long 可以保存64位二进制的数字
------解决方案--------------------
整形数中long int和int是一样的,对于32位的计算机,都是一个计算机位,即32位,最大的也就2的31次方减1,就算unsigned也才2的32次方减1,十进制最大4乘以10的9次方罢了,所以不能有11位,最大10.