C大虾帮忙检查个C程序

jasmine 2011-04-22 03:48:22
题:给以个不多于5位的正整数,要求:(1)求它是几位数,(2)分别打印出每一位数字,(3)按逆序打印出各位数字。
(这段程序有5位时,是正确输出;但是如果只有四位数字时,就会出现错误,有哪位知道如何修改么)
#include <stdio.h>
void main()
{long x,nnum;
int num,t1,t2,t3,t4,t5;
scanf("%ld",&x);
if(x>9999)num=5;
else if(x>999)num=4;
else if(x>99)num=3;
else if(x>9)num=2;
else num=1;
printf("num=%d\n",num);
t1=x/10000;
t2=(int)(x-t1*10000)/1000;
t3=(int)(x-t1*10000-t2*1000)/100;
t4=(int)(x-t1*10000-t2*1000-t3*100)/10;
t5=(int)x-t1*10000-t2*1000-t3*100-t4*10;
if(x>9999)
printf("t1=%d,t2=%d,t3=%d,t4=%d,t5=%d\n",t1,t2,t3,t4,t5);
else if(x>999)
printf("t2=%d,t3=%d,t4=%d,t5=%d\n",t2,t3,t4,t5);
else if(x>99)
printf("t3=%d,t4=%d,t5=%d\n",t3,t4,t5);
else if(num=9)
printf("t4=%d,t5=%d\n",t4,t5);
else printf("t5=%d\n",t5);


switch(num)
{case 1:printf("%d\n",t5);
case 2:printf("%d%d\n",t5,t4);
case 3:printf("%d%d%d\n",t5,t4,t3);
case 4:printf("%d%d%d%d\n",t5,t4,t3,t2);
case 5:printf("%d%d%d%d%d\n",t5,t4,t3,t2,t1);
}
system("pause");

}
...全文
43 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
大巨魔战将 2011-04-22
  • 打赏
  • 举报
回复
t4=t4=(int)x/10%10; 上面写的有点乱
大巨魔战将 2011-04-22
  • 打赏
  • 举报
回复
这个程序有多处硬伤,1.上面提到的case 后,要break; 还有需要default: printf("error"); break;
2. 上面分明是 else if(x>9) 楼主写成了else if(num>9),试想怎么会有9位长的数字
3. 求位数的算法太繁琐, 这样写比较简单
t1=x/10000;
t2=(int)x/1000%10;
t3=(int)x/100%10;
t4=(int)x/10;
t5=(int)x%10;
wo_aidoudou 2011-04-22
  • 打赏
  • 举报
回复
我也不大太懂,找到的可能的问题有以下几个:
①定义了long nnum 但是没有用 当然这个问题不影响结果
②else if(num=9)
按照你写的思路,num不应该表示位数吗?怎么会出现9位呢
应该是else if(x>9)
③switch case 的每一个case后面都应该加一个break的,而且最好有一个default
④system("pause")不是在stdlib.h中吗 为什么不包含这个头文件呢

简单更改后代码如下,仅供参考:
#include <stdio.h>
#include <stdlib.h>

void main()
{
long x;
int num,t1,t2,t3,t4,t5;

scanf("%ld",&x);

if(x>9999)
num=5;
else if(x>999)
num=4;
else if(x>99)
num=3;
else if(x>9)
num=2;
else
num=1;
printf("num=%d\n",num);

t1=x/10000;
t2=(int)(x-t1*10000)/1000;
t3=(int)(x-t1*10000-t2*1000)/100;
t4=(int)(x-t1*10000-t2*1000-t3*100)/10;
t5=(int)(x-t1*10000-t2*1000-t3*100-t4*10);
if(x>9999)
printf("t1=%d,t2=%d,t3=%d,t4=%d,t5=%d\n",t1,t2,t3,t4,t5);
else if(x>999)
printf("t2=%d,t3=%d,t4=%d,t5=%d\n",t2,t3,t4,t5);
else if(x>99)
printf("t3=%d,t4=%d,t5=%d\n",t3,t4,t5);
else if(num>9)
printf("t4=%d,t5=%d\n",t4,t5);
else printf("t5=%d\n",t5);


switch(num)
{
case 1:
printf("%d\n",t5);
break;
case 2:
printf("%d%d\n",t5,t4);
break;
case 3:
printf("%d%d%d\n",t5,t4,t3);
break;
case 4:
printf("%d%d%d%d\n",t5,t4,t3,t2);
break;
case 5:
printf("%d%d%d%d%d\n",t5,t4,t3,t2,t1);
break;
}
system("pause");

}
jasmine 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 justkk 的回复:]
每个case下面加一个break
[/Quote]
跟我想的一样
刚刚在你提醒之下 我也改了过来
多谢多谢
justkk 2011-04-22
  • 打赏
  • 举报
回复
每个case下面加一个break
jasmine 2011-04-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 justkk 的回复:]
else if(num=9)
==》
else if(num==9)
[/Quote]
改过来了 如果输入4位数还是错误的
还有 别的么
justkk 2011-04-22
  • 打赏
  • 举报
回复
else if(num=9)
==》
else if(num==9)
yue_shanglin 2011-04-22
  • 打赏
  • 举报
回复
代码密密麻麻,我表示可以帮你顶一下

69,373

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧