-
题目描述:
-
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
-
输入:
-
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
-
输出:
-
每行输出对应的二进制数。
-
样例输入:
-
0 1 3 8
-
样例输出:
-
0 1 11 1000
之前做过一道 大整数任意进制的转换,所以这道题也就是小case了。 大整数的进制转换,完全模拟人工手算,将数据保存在整型数组里。另外,要注意的是,输入的数最多不超过30位,但是输出的是二进制,就有可能超过30位,所以output[] 数组的空间要开大一点。
#include <iostream> #include <string.h> #include <cstring> using namespace std; int main(){ string str; int input[32]; int output[100]; while(cin>>str){ for(int i=0;i<str.length();i++){ input[i] = str[i] - '0'; } memset(output,0,sizeof(output)); int sum = 1; int d = 0; int len = str.length(); int k = 0; while(sum){ sum = 0; for(int i=0;i<len;i++){ d = input[i] / 2; sum += d; if(i == (len - 1)){ output[k++] = input[i] % 2; } else input[i+1] += (input[i]%2)*10; input[i] = d; } } if(k == 0){ output[k] = 0; k--; } if(k == -1) cout<<0; else{ for(int i=k-1;i>=0;i--) cout<<output[i]; } cout<<endl; } return 0; }