题目描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入描述:
多组数据,每行为一个长度不超过30位的十进制非负整数。
(注意是10进制数字的个数可能有30个,而非30bits的整数)
输出描述:
每行输出对应的二进制数。
示例1
输入
0
1
3
8
输出
0
1
11
1000
思路
大整数除法(30位数字也不是很大,用两个long long
类型就可以了)
题解
#include <cstdio>
#include <cstdlib>
#include <stack>
#include <cstring>
using namespace std;
int main() {
char a[31];
stack<int> ans;
while(~scanf("%s", a)){
int len = strlen(a+15);
long long base = 5;
if(len){
while(len--){
base *= 10;
}
base /= 10;
} else {
base /=5;
}
long long tail = atoll(a+15);
a[15] = 0;
long long head = atoll(a);
while(tail || head){
if(base == 1)
ans.push(head&1);
else
ans.push(tail&1);
tail = tail/2 + (head&1)*base;
head /= 2;
}
while(!ans.empty()){
if(ans.top() != 0) break;
ans.pop();
}
if(ans.empty()) printf("0");
while(!ans.empty()){
printf("%d", ans.top());
ans.pop();
}
printf("\n");
}
return 0;
}