一个c++程序问题!急!求神!!

#include<stdio.h>
long i,x,j=0;
long xx[64]={0};
void main(void)
{
while(1)
{
scanf("%d",&i);
do
{
long a=0,b=0,c=0,d=0,n=0;

for(n=1;n<5;n++)
{
x=i%10;
i=i/10;
switch(n)
{
case 1: a=x*1;break;
case 2: b=x*2;break;
case 3: c=x*4;break;
case 4: d=x*8;break;
}
}
xx[j++]=a+b+c+d;
}while(i!=0);

for(;j>0;)
printf("%x",xx[--j]);
printf("\n");
}
}
/*这段程序是输入二进制转换成十六进制!可是为什么只能转换十位二进制数,我输入11位二进制数的时候就出现乱码了!求解释,*/

超出了long所表示的值的范围,sizeof(long)应该和sizeof(int)一样的是4字节大小,所以最大能表示的值是2^32 - 1 = 4294967295 (一共10位数) 当你输入所谓的11位二进制数超出了这个范围 自然是乱套了.

使用 hash表 来进行转换会更好一些,即效率 还不会溢出. 欢迎到0x30贴吧,讨论更多c/c++的知识.
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-02-19
不是十位的问题,而是大于了long的范围,2的31次方。
scanf("%d",&i);
你用长整数接收,之后也是long计算,结果肯定是这样了,如果希望接收大数,应该输入就是用数组。
第2个回答  2013-02-19
你输入的不是二进制呀,明显是一个整数,自欺欺人呢。。。。

输入十一位之后,系统都不知道你输入的是什么东西了,怎么会返回给你正确的东西。。。追问

那怎么样输入才算二进制呢?

相似回答