首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

这个小程序,错在哪里?该如何解决

2012-06-16 
这个小程序,错在哪里?我是新手,刚开始学C,主要是想用C做一些竞赛题。题目是:输入一个不超过10的9次方的正整

这个小程序,错在哪里?
我是新手,刚开始学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.

热点排行