问题描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入格式
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出格式
每行输出对应的二进制数。
输入样例
985
211
1126
输出样例
1111011001
11010011
10001100110
C语言代码
#include<stdio.h>
#include<string.h>
//将字符串转换成对应的整数数组
void strtoint(int num[], char str[]){
for(int i = 0; i < strlen(str); i++){
num[i] = str[i] - '0';
}
}
//判断数组内元素是否全为0
bool intcmp(int n1[],int len){
bool flag = true;
for(int i = 0; i < len; i++){
if(n1[i] != 0){
flag = false;
return flag;
}
}
return flag;
}
int main(){
int num[31],count;
char str[31] = {0};
while(scanf("%s",str) != EOF){ //循环输入,直到文件末尾结束
int count = 0, ans[100] = {0};
int len = strlen(str);
strtoint(num , str);
//将10进制数转换成2进制数
do{
for(int i = 0; i < len; i++){ //遍历数组,整除2
if(i != len-1) //高位向低位的进位
num[i+1] += num[i] % 2 * 10;
else //每循环一次的余数,存放在ans[]中
ans[count++] = num[i] % 2;
num[i] = num[i] / 2;
}
}while(!intcmp(num,len)); //判断循环结束的标志
//倒叙输出,得到2进制数
for(int i = count-1; i >= 0; i--)
printf("%d",ans[i]);
printf("\n");
}
return 0;
}