题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入描述:
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出描述:
每行输出对应的二进制数。
示例1
输入
0
1
3
8
输出
0
1
11
1000
采用除k取余法
#include<bits/stdc++.h>
using namespace std;
//十进制转二进制
char n[40], buf[200];
int main(){
int num[40];
int len, i, len_str, c, tmp, j;
while (scanf("%s", n) != EOF){
for (len = 0; n[len]; len++){//字符串转成int数组
num[len] = n[len] - '0';
}
i = 0, len_str = 0;
while (i < len){//除2取余法
buf[len_str++] = num[len - 1] % 2 + '0';//余数
// 大数除法,更新num[]数组
c = 0;
for (j = i; j < len; j++){
tmp = num[j];
num[j] = (num[j] + c) / 2;//高位除2(数的高位对应数组低位
if (tmp & 1){//二进制位与运算,判断tmp是否为奇数
// 若tmp为奇数, 则该位必有余数10
c = 10;
}
else
c = 0;
}
if (num[i] == 0) //高位变为0
i++;
}
for (int j = len_str - 1; j >= 0; j--){
printf("%c", buf[j]);
}
printf("\n");
}
return 0;
}