国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【十進制 轉(zhuǎn) 二進制】【二進制 轉(zhuǎn) 十進制】10進制 VS 2進制【清華大學考研機試題】

這篇具有很好參考價值的文章主要介紹了【十進制 轉(zhuǎn) 二進制】【二進制 轉(zhuǎn) 十進制】10進制 VS 2進制【清華大學考研機試題】。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

原題鏈接

本題我們先需要知道
十進制 如何轉(zhuǎn) 二進制
二進制 如何轉(zhuǎn) 十進制

十進制 如何轉(zhuǎn) 二進制:
【十進制 轉(zhuǎn) 二進制】【二進制 轉(zhuǎn) 十進制】10進制 VS 2進制【清華大學考研機試題】

十進制轉(zhuǎn)成二進制

例如 173 轉(zhuǎn)成 二進制
就把173 短除法 除到0 然后 得到的余數(shù),從下往上寫

二進制 轉(zhuǎn)成 十進制

【十進制 轉(zhuǎn) 二進制】【二進制 轉(zhuǎn) 十進制】10進制 VS 2進制【清華大學考研機試題】
利用如圖方法,把二進制 轉(zhuǎn)成 十進制

本題是高精度,如何做?

由于本題的 數(shù)據(jù)是1000位,
那么 1000位的數(shù) / 2 是需要高精度除法
以及需要 高精度乘法,高精度加法的

原因如上述兩個圖,都需要用到 乘法,除法,加法

注意:文章來源地址http://www.zghlxwxcb.cn/news/detail-425890.html

  1. 把初始數(shù)據(jù)a,每一位從大到小或者從小到大,入vector都可以,但是除法的時候,注意是從高位除起
  2. 剩下的就是正常的 高精度算法
#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)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包