题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出
每行输出对应的二进制数。
样例输入
样例输出
思路:
从高到低进行除法操作,一个for循环即进行一次除法操作,直至数组长度为0
代码:
#include<stdio.h>
#include<string.h>
int main() {
char a[40];
while (scanf("%s", a) != EOF) {
int b[400], n = 0;
int len = strlen(a);
do {
int x, y = 0, i, j;
for (i = 0; i < strlen(a); i++) { //从高到低进行除法操作
if (y == 1) {
x = (10 + a[i] - '0') / 2;
y = (10 + a[i] - '0') % 2;
}
else {
x = (a[i] - '0') / 2;
y = (a[i] - '0') % 2;
}
a[i] = x + '0'; //a数组用来保存一次除法操作后的结果
}
b[n++] = y; //b数组用来保存每一次除法操作最后的余数
len = i;
if (a[0] == '0') { //如果第一位为0,则将整个数组向前移动一位,且长度-1
len--;
for (j = 0; j < i - 1; j++)
a[j] = a[j + 1];
a[j] = '\0'; //char数组末尾一定要有'\0'
}
} while (len > 0);
for (int i = n - 1; i >= 0; i--) {
printf("%d", b[i]);
}
printf("\n");
}
return 0;
}