标题:关于逆转
只看楼主
floraD
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-12-12
 问题点数:0 回复次数:7 
关于逆转

#include "stdio.h"
void main()
{
int a,b;
scanf("%d",&a);
while(a)
{
b=a%10;
printf("%d",b);
a=a/10;
}
printf("\n");
}


用这个程序来进行数的逆转输出,为什么当数字的数目多于5个或者数字比较大的时候,运行后结果会不对呢?

搜索更多相关主题的帖子: 数字 printf void main include 
2007-01-28 20:19
slong
Rank: 1
等 级:新手上路
帖 子:35
专家分:0
注 册:2006-11-9
得分:0 
应该跟类型定义有关吧!int的取值范围是 -32768 - 32767 超过这个数就成垃圾数据了
学没多久,不知道这样说正不正确
2007-01-28 23:49
huawang99
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2007-1-28
得分:0 
我试过了,这个和那个没有关系的.我想这要涉及到微机原理汇编上面的十进制与二进制之间的关系问题了,可能数值比较大的时候,除法运算后的值仍然比较大,寄存器可能装不下,从而导致错误吧.
以上纯属个人推断,呵呵!

2007-01-28 23:56
tyc611
Rank: 1
等 级:新手上路
帖 子:83
专家分:0
注 册:2007-1-21
得分:0 
以下是引用slong在2007-1-28 23:49:00的发言:
应该跟类型定义有关吧!int的取值范围是 -32768 - 32767 超过这个数就成垃圾数据了
学没多久,不知道这样说正不正确

对的,一旦超过int的表示范围,这就是一个未定义的行为了


2007-01-29 00:07
floraD
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-12-12
得分:0 
oh~I see.
THX for all of you ~~
2007-01-29 09:26
huawang99
Rank: 1
等 级:新手上路
帖 子:54
专家分:0
注 册:2007-1-28
得分:0 

我又把程序改为:

void main()
{
long a,b;
scanf("%d",&a);
while(a)
{
b=a%10;
printf("%d",b);
a=a/10;
}
printf("\n");
getch();
}
然后在DeV-C++下编译运行后,输入123456和1234567,结果都正确逆转,看来这个使用的编译器类型有关系,
不同类型编译器自带的算法在某些情况下可能有问题!


2007-01-29 13:27
floraD
Rank: 1
等 级:新手上路
帖 子:15
专家分:0
注 册:2006-12-12
得分:0 
嗯,应该是这样的吧。
再次谢谢喔~
2007-01-30 00:03
hiaod
Rank: 1
等 级:新手上路
威 望:1
帖 子:66
专家分:0
注 册:2007-1-25
得分:0 
是与数的位数有关。在TC上编译,int 为16位,因此它的取值范围是-32768~+32767;在C++下,int 为32位,long为64位,因此它的取值范围更大一些。
2007-01-30 00:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-118592-1-1.html




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

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