一个c语言的小问题,求高手解答

#include"stdio.h"voidmain(){intnum,the_unit,decade,hundred,thousand;printf("请输入不多于4位数... #include"stdio.h"
void main()
{
int num,the_unit,decade,hundred,thousand;
printf("请输入不多于4位数的正整数=");
loop:scanf("%d",&num);
if(num>=9999)
{
printf("错误,请重新输入=");
goto loop;
}
else if((num/1000)!=0)
{
printf("这个数字是4位数\n");
thousand=num/1000;
hundred=num%1000/100;
decade=num%1000%100/10;
the_unit=num%1000%100%10;
printf("个位是%d,十位是%d,百位是%d,千位是%d\n",the_unit,decade,hundred,thousand);
printf("逆序输出是\n");
printf("%d%d%d%d",thousand,hundred,decade,the_unit);
}
else if((num/100)!=0)
{
printf("这个数字是3位数\n");
hundred=num%1000/100;
decade=num%1000%100/10;
the_unit=num%1000%100%10;
printf("个位是%d,十位是%d,百位是%d\n",the_unit,decade,hundred);
printf("逆序输出是\n");
printf("%d%d%d",hundred,decade,the_unit);
}
else if((num/10)!=0)
{
printf("这个数字是2位数\n");
decade=num%1000%100/10;
the_unit=num%1000%100%10;
printf("个位是%d,十位是%d\n",the_unit,decade);
printf("逆序输出是\n");
printf("%d%d",decade,the_unit);
}
else if(num/10!=0)
{
printf("这个数字是1位数\n");
the_unit=num%1000%100%10;
printf("个位是%d\n",the_unit);
printf("逆序输出是\n");
printf("%d",the_unit);

}
}
这道题的要求是给一个不多于4位数的正整数,(1)求出它是几位数,(2)分别输出每一位数字;(3)按逆序输出数字,程序已经调试好了,但是发现了一个问题,如果我随便输入一个很大的数字如图,就会出现如下的问题,请问这是什么情况啊,谢谢!
展开
 我来答
yuhezcb0755
2013-06-03 · TA获得超过643个赞
知道小有建树答主
回答量:237
采纳率:0%
帮助的人:118万
展开全部
这是因为数字太大,溢出,就可能变成负数,负数明显不满足>9999的条件,所以第一个判断不成立,结果第2条刚好成立,导致认为是4位数.
百度网友83cdc1c
2013-06-03 · TA获得超过5792个赞
知道大有可为答主
回答量:1907
采纳率:100%
帮助的人:867万
展开全部
#include"stdio.h"

void main()

{

 unsigned num,the_unit,decade,hundred,thousand;

 printf("请输入不多于4位数的正整数=");

loop:scanf("%d",&num);

 if(num>=9999)

 {

 printf("错误,请重新输入=");

 goto loop;

 }

 else if((num/1000)!=0)

 {

 printf("这个数字是4位数\n");

 thousand=num/1000;

 hundred=num%1000/100;

 decade=num%1000%100/10;

 the_unit=num%1000%100%10;

 printf("个位是%d,十位是%d,百位是%d,千位是%d\n",the_unit,decade,hundred,thousand);

 printf("逆序输出是\n");

 printf("%d%d%d%d",the_unit,decade,hundred,thousand);

 }

 else if((num/100)!=0)

 {

 printf("这个数字是3位数\n");

 hundred=num%1000/100;

 decade=num%1000%100/10;

 the_unit=num%1000%100%10;

 printf("个位是%d,十位是%d,百位是%d\n",the_unit,decade,hundred);

 printf("逆序输出是\n");

 printf("%d%d%d",the_unit,decade,hundred);

 }

 else if((num/10)!=0)

 {

 printf("这个数字是2位数\n");

 decade=num%1000%100/10;

 the_unit=num%1000%100%10;

 printf("个位是%d,十位是%d\n",the_unit,decade);

 printf("逆序输出是\n");

 printf("%d%d",the_unit,decade);

 }

 else if(num/10!=0)

 {

 printf("这个数字是1位数\n");

 the_unit=num%1000%100%10;

 printf("个位是%d\n",the_unit);

 printf("逆序输出是\n");

 printf("%d",the_unit);


 }

}

输入太大的数可能被读成负数,而负数是满足<=9999的。

建议把前面的变量定义成unsigned无符号数,这样就不会有负数了。

另外,你的代码里逆序输出输出循序反了,我改了一下。

追问
高手啊!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式