原題鏈接
本題我們先需要知道
十進制 如何轉(zhuǎn) 二進制
二進制 如何轉(zhuǎn) 十進制
十進制 如何轉(zhuǎn) 二進制:
十進制轉(zhuǎn)成二進制
例如 173 轉(zhuǎn)成 二進制
就把173 短除法 除到0 然后 得到的余數(shù),從下往上寫
二進制 轉(zhuǎn)成 十進制
利用如圖方法,把二進制 轉(zhuǎn)成 十進制
本題是高精度,如何做?
由于本題的 數(shù)據(jù)是1000位,
那么 1000位的數(shù) / 2 是需要高精度除法
以及需要 高精度乘法,高精度加法的
原因如上述兩個圖,都需要用到 乘法,除法,加法文章來源:http://www.zghlxwxcb.cn/news/detail-425890.html
注意:文章來源地址http://www.zghlxwxcb.cn/news/detail-425890.html
- 把初始數(shù)據(jù)a,每一位從大到小或者從小到大,入vector都可以,但是除法的時候,注意是從高位除起
- 剩下的就是正常的 高精度算法
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
vector<int> div(vector<int>& A, int b, int& r)
{
vector<int> C;
r = 0;
for (int i = A.size() - 1; 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> mul(vector<int>& A, int b)
{
vector<int> C;
for (int i = 0, t = 0; i < A.size() || t; i ++ )
{
if (i < A.size()) t += A[i] * b;
C.push_back(t % 10);
t /= 10;
}
while (C.size() > 1 && C.back() == 0) C.pop_back();
return C;
}
vector<int> add(vector<int>& A, int b)
{
vector<int> C;
for (int i = 0, t = b; i < A.size() || t; i ++ )
{
if (i < A.size()) t += A[i];
C.push_back(t % 10);
t /= 10;
}
return C;
}
void print(vector<int>& A)
{
for (int i = A.size() - 1; i >= 0; i -- )
cout << A[i];
cout << endl;
}
int main()
{
string a;
cin >> a;
vector<int> A;
for (int i = a.size() - 1; i >= 0; i -- ) A.push_back(a[i] - '0');
vector<int> B;
while (A.size() > 1 || A[0] > 0)
{
int r;
A = div(A, 2, r);
B.push_back(r);
}
vector<int> C;
for (int x: B)
{
C = mul(C, 2);
C = add(C, x);
}
print(C);
return 0;
}
到了這里,關(guān)于【十進制 轉(zhuǎn) 二進制】【二進制 轉(zhuǎn) 十進制】10進制 VS 2進制【清華大學考研機試題】的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!