-
题目描述:
-
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
-
输入:
-
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
-
输出:
-
每行输出对应的二进制数。
-
样例输入:
-
0 1 3 8
-
样例输出:
-
0 1 11 1000
代码:
#include <stdio.h>
#include <string.h>
char str[30];
int main() {
while(scanf("%s",str)!=EOF) {
int sum = 1;
int ans[100];
int i,j=0;
while(sum) {
sum = 0;
int len = strlen(str);
for(i = 0;i<len;i++) {
int d = (str[i] - '0') % 2;
int x = (str[i] - '0') / 2;
sum += x;
if(i == len - 1) {
ans[j++] = d;
}
else
str[i+1] += d * 10;
str[i] = x + '0';
}
}
for(i = j - 1;i>=0;--i)
printf("%d",ans[i]);
printf("\n");
}
return 0;
}