由于题中给出的数字最长可达30位,所以不能单纯的用除法来求二进制,应该以string的形式接收字符串,然后一位一位的来除。
例如:128 首先除2余0,再除2余0,除到最后余1,则128的二进制可以写为1000 0000。即把之前所得的余数反过来写。
所以这里要设计一个函数来按位除,最终所得的数字一定比原来小。
#include<iostream>
#include<vector>
#include<string>
using namespace std;
string Div(string s, int x)
{
int res = 0;
for(int i = 0; i < s.length(); i++)
{
int now = res * 10 + (s[i] - '0');
s[i] = now / x + '0';
res = now % x;
}
int pos = 0;
while(s[pos] == '0')
pos++;//找到不为0的起始位置,如0010,这样最终返回的是不包含0的字符串
return s.substr(pos);
}
int main()
{
string str;
while(cin >> str)
{
vector<int> binary;
while(str.size() != 0)
{
int last = str[str.length()-1]-'0';
binary.push_back(last%2);
str = Div(str, 2);
}
for(int i = binary.size()-1; i >= 0; i--)
cout << binary[i];
cout << endl;
}
}