作者:
MyPower
,
2023-04-27 01:15:49
,
所有人可见
,
阅读 10
#include <iostream>
#include <bits/stdc++.h>
using namespace std;
vector <int> div(vector <int>& A, int b, int &r)
{
vector <int> C;
int t = 0;
for(int i = A.size(); i >= 0; i --)
{
r = r * 10 + A[i];
C.push_back(r / b);
r %= b;
}
reverse(C.begin(), C.end());
while(C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
vector <int> add(vector <int> A, int b)
{
vector <int> C;
int t = 0;
for(int i = 0; i < A.size(); i ++)
{
t += A[i];
if(b) t += b % 10;
C.push_back(t % 10);
t /= 10;
b /= 10;
}
if(t) C.push_back(t);
return C;
}
vector <int> mul(vector <int> A, int b)
{
vector <int> C;
int t = 0;
for(int i = 0; i < A.size(); i ++)
{
t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
if(t) C.push_back(t);
return C;
}
void print(vector <int> A)
{
for(int i = A.size() - 1; i >= 0 ; i --) cout << A[i];
cout << endl;
}
int main()
{
vector <int> a, b;
string s;
cin >> s;
for(int i = s.size() - 1; i >= 0; i --) a.push_back(s[i] - '0');
//将十进制转化为二进制
while(a.size() > 1 || a[0] > 0)
{
int r = 0;
a = div(a, 2, r);
b.push_back(r);
}
//将二进制逆序转化为十进制
vector <int> C{0};
for(int i = 0; i < b.size(); i ++)
{
C = mul(C, 2);
// print(C);
C = add(C, b[i]);
}
print(C);
return 0;
}