| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 2670 人关注过本帖
标题:[求助]C语言题目的数据长整型,整型问题
只看楼主 加入收藏
kowar
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-23
收藏
 问题点数:0 回复次数:3 
[求助]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编辑过]

搜索更多相关主题的帖子: 整型 C语言 wei int 
2007-06-23 00:29
kowar
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-23
收藏
得分:0 

这么多人,没有一个人用tc么?也没有人愿意帮帮忙?:(

2007-06-25 10:19
pinglideyu
Rank: 3Rank: 3
来 自:武汉工程大学
等 级:论坛游侠
威 望:1
帖 子:735
专家分:140
注 册:2007-1-7
收藏
得分:0 
你看你定义的wei,wan,qian,bai,shi,ge都是整形,而qian=(int)(x-wan*10000)/1000;
中的“/”是整除,不然结果会是浮点数,故要强制转换。

~~我的明天我知道~~
2007-06-25 10:31
kowar
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2007-6-23
收藏
得分:0 
以下是引用pinglideyu在2007-6-25 10:31:02的发言:
你看你定义的wei,wan,qian,bai,shi,ge都是整形,而qian=(int)(x-wan*10000)/1000;
中的“/”是整除,不然结果会是浮点数,故要强制转换。

整型除以整型是会得到小数,但是qian的类型是整型,到后面还是会转成整型的。

问题我已经解决了:
如果x很大,那么wan = x / 10000,
而后wan * 10000是有可能溢出 的,所以我刚才用39999去试验没有错
但是用40000就出错了,因为4*10000的结果超过tc int的范围了

至于加(int)强制转换,应该是溢出之后,再转换成long
所以
第一句是不会溢出的,但是后面的就会溢出了,他在前面强制转换回来,
刚好实际值在int范围内,所以就又好了
至于最后那句为什么可以不用加int
是因为最后的结果没有除法
算出来的结果,因为ge本来就是int型,后面再转换int就正常了

2007-06-25 12:42
快速回复:[求助]C语言题目的数据长整型,整型问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.010988 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved