题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入描述:
多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数)
输出描述:
每行输出对应的二进制数。
示例1
输入
0 1 3 8
输出
0 1 11 1000
#include<stdio.h>
#include<string.h>
int main() {
char str[100];
int source[100];
int dst[100];
while(scanf("%s", str) != EOF) {
int i, flag = 0, carry = 0;
int len = strlen(str);
for (i = 0; i < len; i++)
source[i] = str[i] - '0';
i = 0;
while(i < len) {
carry = 0;
for (int j = i; j < len; j++) {
carry = (carry << 3) + (carry << 1);
int temp = (carry+source[j]) / 2;
carry = source[j] % 2;
source[j] = temp;
}
dst[flag++] = carry;
while (source[i] == 0 && i < len) i++;
}
for (int i = flag-1; i >= 0; i--)
printf("%d", dst[i]);
printf("\n");
}
return 0;
}
不能使用整型存储,使用字符数组。详细步骤如下: