描述
将一个长度最多为30位数字的十进制非负整数转换为二进制数输出。
输入描述:
多组数据,每行为一个长度不超过30位的十进制非负整数。 (注意是10进制数字的个数可能有30个,而非30bits的整数)
输出描述:
每行输出对应的二进制数。
示例1
输入:
0
1
3
8
输出:
0
1
11
1000
#define _CRT_SECURE_NO_WARNINGS 1
#include <bits/stdc++.h>
using namespace std;
//字符串除法
string Divide(string str, int x) {
int remainder = 0;//保存余数
for (int i = 0; i < str.size(); ++i) {
int current = remainder * 10 + str[i] - '0';
str[i] = current / x + '0';
remainder = current % x;
}
int pos = 0;
while (str[pos] == '0')//寻找首个非0下标
{
pos++;
}
return str.substr(pos);//删除前置多余的0
}
int main() {
string str;
while (cin >> str)
{
vector<int> binary;
while (str.size()!=0)
{
int last = str[str.size() - 1] - '0';//最低位的值
binary.push_back(last % 2);//取模运算
str = Divide(str, 2);//整除运算
}
for (int i = binary.size() - 1; i >= 0; --i)
printf("%d", binary[i]);
cout << endl;
}
return 0;
}