题目描述:
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入:
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出:
每行输出对应的二进制数。
样例输入:
0
1
3
8
样例输出:
0
1
11
1000
下面是我的代码:
#include<stdio.h>
#include<string.h>
int main()
{
char s[40];
int a[40],t[200],i,len,k,x,top,b[40];
while(scanf("%s",s)!=EOF)
{
top=0;
k=0;
getchar();
len=(int)strlen(s);
i=0;
while(i<len)
{
a[len-1-i]=s[i]-'0';
i++;
}//将s中数赋值到a中,并且逆置,高位在数组a末尾
while(a[len-1]==0)
len--;
if(len==0)
printf("0\n");
else
{
while(len!=0)
{
k=0;
for(i=len-1;i>=0;i--)
{
x=k*10+a[i];
b[i]=x/2;
k=x%2;
}//将a中d数除以2,除数放在b中
t[top++]=a[0]%2;//余数放在t中
for(i=0;i<len;i++)
a[i]=b[i];
while(a[len-1]==0)
len--;
}
for(i=top-1;i>=0;i--)
printf("%d",t[i]);
printf("\n");
}
}
}
------解决方案--------------------------------------------------------
我运行了一下可以运行啊,怎么会运行时错误呢,你把文件保存成.cpp试试~