十进制转二进制使用大整数除法即可,而在二进制转十进制时,需要注意
#include<iostream>
#include<string>
using namespace std;
void Divide(string &str){
int remainder = 0,pos;
for(int i = 0;i < str.size();++i){
int cur = remainder * 10 + str[i] - '0';
str[i] = (cur / 2) + '0';
remainder = cur % 2;
}
pos = str.find_first_not_of('0');
if(pos == string::npos)
str = "";
else
str = str.substr(pos);
}
string multi(string str,int x){
int carry = 0;
for(int i = str.size() - 1;i >= 0;--i){
int cur = x * (str[i] - '0') + carry;
str[i] = cur % 10 + '0';
carry = cur / 10;
}
if(carry)
str = "1" + str;
return str;
}
string add(string str,int x){
int carry = x;
for(int i = str.size() - 1;i >= 0;--i){
int cur = (str[i] - '0') + carry;
str[i] = cur % 10 + '0';
carry = cur / 10;
}
if(carry)
str = "1" + str;
return str;
}
int main()
{
string str,ans = "",cj = "0";
cin >> str;
while(!str.empty()){
int late = str.back() - '0';
ans += to_string(late % 2);
Divide(str);
}
for(int i = 0;i < ans.size();++i){
cj = multi(cj, 2);
cj = add(cj,ans[i] - '0');
}
cout << cj;
}