题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出
每行输出对应的二进制数。
样例输入
985
211
1126
样例输出
1111011001
11010011
10001100110
代码
#include<cstdio>
#include<cstring>
int main(){
char dec_number[31];
while(scanf("%s",dec_number)!=EOF){
int len=strlen(dec_number);//大整数的长度
int ans[100],num=0;//ans存放二进制结果,num记录结果的位数
for(int i=0;i<len;++i) dec_number[i]-='0';
for(int i=0;i<len;){
ans[num++]=dec_number[len-1]%2;//尾数的奇偶性决定了余数
for(int j=0;j<len;++j){//每一位除以2
if(dec_number[j]%2==0){//偶数则直接除
dec_number[j]/=2;
}else{//奇数下一位加10
dec_number[j]/=2;
dec_number[j+1]+=10;
}
}
if(!dec_number[i]){//首位为0则后移一位
++i;
}
}
for(int i=num-1;i>=0;--i){//输出结果
printf("%d",ans[i]);
}
printf("\n");
}
return 0;
}