题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出
每行输出对应的二进制数。
样例输入 Copy
985 211 1126
样例输出 Copy
1111011001 11010011 10001100110
解题思路:完全是模拟手动计算的过程,只不过在计算余数时,判断最后一个数字是否为偶数(若是偶数,则余数为0,是奇数,则余数为1)(转换其他进制不可以这样计算)。
代码如下:输入的字符串转换为int数组,是为了方便计算,而且当某一个字符 == 0(数字0,不是字符0)时,此时该字符相当于'\0',使得strlen()函数出错。
#include<bits/stdc++.h>
using namespace std;
int main(){
char num[40];
while(scanf("%s",&num) != EOF){
int input[40] = {0};
for(int i = 0; i < strlen(num); i++){
input[i] = num[i] - 48;
}
int output[100000] = {0};
int in_index = 0;
int out_index = 0;
while(in_index != strlen(num)){
if(input[strlen(num) - 1] % 2 == 0){
output[out_index++] = 0;
}else{
output[out_index++] = 1;
}
// printf("out = %d\n",output[out_index - 1]);
int temp = 0;
for(int i = in_index; i < strlen(num); i++){
temp = temp * 10 + input[i];
input[i] = temp / 2;
temp %= 2;
// printf("input[%d] = %d ",i,input[i]);
}
// printf("\nlen = %d\n",strlen(num));
if(input[in_index] == 0){
in_index++;
}
}
for(int i = out_index - 1; i >= 0; i--){
printf("%d",output[i]);
}
printf("\n");
}
}