十进制转二进制使用大整数除法即可,而在二进制转十进制时,需要注意

#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;
}