[求助]C语言题目的数据长整型,整型问题
这是一个输入一个不超过五位的整数,要求判断其位数,并把每位输出,然后逆序输出数字 #include<stdio.h>
void main()
{
long x;
int wei,wan,qian,bai,shi,ge;
scanf ("%ld",&x);
printf ("%ld\n",x);
if(x>9999) wei=5;
else if(x>999) wei=4;
else if(x>99) wei=3;
else if(x>9) wei=2;
else wei=1;
wan=x/10000;
qian=(int)(x-wan*10000)/1000;
bai= (int)(x-wan*10000-qian*1000)/100;
shi= (int)(x-wan*10000-qian*1000-bai*100)/10;
ge= (int)(x-wan*10000-qian*1000-bai*100-shi*10);
printf("weishu shi:%d\n",wei);
switch(wei)
{
case 5: printf("%d,%d,%d,%d,%d\n",wan,qian,bai,shi,ge);
printf("%d%d%d%d%d\n",ge,shi,bai,qian,wan);
break;
case 4: printf("%d,%d,%d,%d\n",qian,bai,shi,ge);
printf("%d%d%d%d\n",ge,shi,bai,qian);
break;
case 3: printf("%d,%d,%d\n",bai,shi,ge);
printf("%d%d%d\n",ge,shi,bai);
break;
case 2: printf("%d,%d\n",shi,ge);
printf("%d%d\n",ge,shi);
break;
case 1: printf("%d\n",ge);
printf("%d\n",ge);
}
}
上面是谭浩强老师书上第五章的习题5.7解答
其中的这几句:wan=x/10000;
qian=(int)(x-wan*10000)/1000;
bai=(int)(x-wan*10000-qian*1000)/100;
shi=(int)(x-wan*10000-qian*1000-bai*100)/10;
ge=(int)(x-wan*10000-qian*1000-bai*100-shi*10);
为什么要在前面加上强制转换成整型符号呢?如果不加的话输入数据小的时候没有错误,比如说1234,但是如果变成95586就会出错啦!长整型和整型之间运算不是按照整型转换成长整型运算么?而且除法书上说的是靠零取整,为什么第一句不加(int)可以,后面三句必须要加才不会错,而第四句我测试,好像不加也不会错。另外,这个程序我在vc上面调试用我自己的写法:wan=x/10000;
qian=(x-wan*10000)/1000;
bai=(x-wan*10000-qian*1000)/100;
shi=(x-wan*10000-qian*1000-bai*100)/10;
ge=x-wan*10000-qian*1000-bai*100-shi*10; 不会出错,但是在tc上就……请高手指点,多谢了……
[此贴子已经被作者于2007-6-23 0:56:32编辑过]