本人C语言初学者。 题:取出一个无符号的十进制整数中的所有奇数数字,按原来的顺序组成一个新的数。

#include<stdio.h>
int main()
{
int x,t,p,m=0,y=0;
scanf("%d",&x);
while(x!=0)
{
t=x%10;
x=x/10;
if(t%2!=0)
m=m*10+t;
}
while(m!=0)
{
p=m%10;
m=m/10;
y=y*10+p;
}
printf("%d",y);
return 0;
}

我这个编程不知道麻烦不麻烦哈,不过随便打几个数都能按题目要求得出答案的,可是一旦输入的数的位数一多 比如十多位 结果就不对了 请问高手这是为什么吖。我的程序有错误吗。

因为十多位的时候,数据溢出了,你把读入的数存在int上,以目前一般的32位平台,int最大都只支持4294967296,更别说16位了,你输入的超过这个,int类型就存不下了。你这种题目应该用字符串读取,然后对每一位进行处理。
读取一个字符串,然后从第一位开始判断,是奇数就取出来放到另一个字符串,最后处理完了就直接把另一个字符串打印出来就行了。
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-03-21
可能有溢出吧,我看你有m=m*10+t;这类的东西,数会越来越大!

其实这事非常容易,从左向右看见奇数就打印,打印完了也就OK了。

另外这事也不一定非要用整型来做,可以是一个字符串,把字符一位一位的转成整数再判断打印就行了,用atoi()这个函数就可以。这样数字就可以几乎无限长了!
第2个回答  2013-03-21
输入的位数太多,就超过int的范围的,所以结果就不对了。不妨改成unsigned long试试。
如果想要很多很多位,那就只能用数组去接受输入了。
第3个回答  2013-03-21
那肯定不对了啊,int型变量取值范围是在-32768~32767,无符号int的话就是0~65536
相似回答