题目描述:
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出
每行输出对应的二进制数。
样例输入
985
211
1126
样例输出
1111011001
11010011
10001100110
代码
此法具有普遍性
#include<cstdio>
#include<cstring>
int main(){
char n[40]; //输入数组
int temp[40]; //中间处理数组
int output[200]; //输出数组
while(scanf("%s",n)!=EOF){
int i;
int length=strlen(n);
memset(temp,0,sizeof(temp)); //将中间数组全部置0
for(i=0;i<length;i++)temp[i]=n[i]-'0'; //将字符转换成数字
int remain=0,j=0; /*用来保留每一位上的商; 记录输出数组的长度;*/
int sum;
do{
sum=0; //用来计算余数是否为0
for(i=0;i<length;i++){
remain=temp[i]/2;
sum+=remain;
if(i<length-1)temp[i+1]+=(temp[i]%2)*10;
else output[j++]=temp[i]%2;
temp[i]=remain;
}
}while(sum);
for(i=j-1;i>=0;i--){
printf("%c",output[i]+'0');
if(i==0)printf("\n");
}
}
return 0;
}