当前位置: 代码迷 >> C语言 >> 关于逆转
  详细解决方案

关于逆转

热度:132   发布时间:2007-01-28 20:19:00.0
关于逆转

#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  

----------------解决方案--------------------------------------------------------
应该跟类型定义有关吧!int的取值范围是 -32768 - 32767 超过这个数就成垃圾数据了
学没多久,不知道这样说正不正确
----------------解决方案--------------------------------------------------------
我试过了,这个和那个没有关系的.我想这要涉及到微机原理汇编上面的十进制与二进制之间的关系问题了,可能数值比较大的时候,除法运算后的值仍然比较大,寄存器可能装不下,从而导致错误吧.
以上纯属个人推断,呵呵!
----------------解决方案--------------------------------------------------------
以下是引用slong在2007-1-28 23:49:00的发言:
应该跟类型定义有关吧!int的取值范围是 -32768 - 32767 超过这个数就成垃圾数据了
学没多久,不知道这样说正不正确

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


----------------解决方案--------------------------------------------------------
oh~I see.
THX for all of you ~~
----------------解决方案--------------------------------------------------------

我又把程序改为:

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,结果都正确逆转,看来这个使用的编译器类型有关系,
不同类型编译器自带的算法在某些情况下可能有问题!


----------------解决方案--------------------------------------------------------
嗯,应该是这样的吧。
再次谢谢喔~
----------------解决方案--------------------------------------------------------
是与数的位数有关。在TC上编译,int 为16位,因此它的取值范围是-32768~+32767;在C++下,int 为32位,long为64位,因此它的取值范围更大一些。
----------------解决方案--------------------------------------------------------
  相关解决方案