题解 | #高精度运算#

10进制 VS 2进制

https://www.nowcoder.com/practice/fd972d5d5cf04dd4bb4e5f027d4fc11e

#include <iostream>
#include<string>
using namespace std;

string add(string A, string B) { //A, B为逆序
    string C;
    int t = 0;
    for(int i = 0; i < A.size() || i < B.size(); i++) {
        if(i < A.size()) t += A[i] - '0';
        if(i < B.size()) t += B[i] - '0';
        C += t % 10 + '0';
        t /= 10;
    }
    if(t) C += t + '0';
    return C;
}

string mul2(string A) { //输入输出均为逆序
    string C;
    int t = 0;
    for(int i = 0; i < A.size(); i++) {
        t += (A[i] - '0') * 2;
        C += t % 10 + '0';
        t /= 10;
    }
    while(t) {
        C += t % 10 + '0';
        t /= 10;
    }
    while(C.size() > 1 && C.back() == '0') C.pop_back();
    return C;
}

string div2(string A, int& r) {
    string C;
    r = 0;
    for (int i = 0; i < A.size(); i++) {
        r = r * 10 + A[i] - '0';
        C += r / 2 + '0';
        r %= 2;
    }
    while (C.size() > 1 && C[0] == '0') C.erase(0, 1);
    return C;
}

int main() {
    string A, bin;  //bin为逆序
    cin >> A;
    while (A != "0") {
        int r = 0;
        A = div2(A, r);
        bin += r + '0';
    }
    // for (int i = bin.size() - 1; i >= 0; i--) cout << bin[i];
    string base = "1", res = "0";
    for(int i = bin.size() - 1; i >= 0; i--) {  //将bin逆序排列进行转换
        if(bin[i] == '1') res = add(res, base);
        base = mul2(base);
    }
    for(int i = res.size() - 1; i >= 0; i--) cout << res[i];

    return 0;
}

全部评论

相关推荐

头像
11-07 01:12
重庆大学 Java
精致的小松鼠人狠话不多:签哪了哥
点赞 评论 收藏
分享
和蔼:在竞争中脱颖而出,厉害! 但是有一个小问题:谁问你了?😡我的意思是,谁在意?我告诉你,根本没人问你,在我们之中0人问了你,我把所有问你的人都请来 party 了,到场人数是0个人,誰问你了?WHO ASKED?谁问汝矣?誰があなたに聞きましたか?누가 물어봤어?我爬上了珠穆朗玛峰也没找到谁问你了,我刚刚潜入了世界上最大的射电望远镜也没开到那个问你的人的盒,在找到谁问你之前我连癌症的解药都发明了出来,我开了最大距离渲染也没找到谁问你了我活在这个被辐射蹂躏了多年的破碎世界的坟墓里目睹全球核战争把人类文明毁灭也没见到谁问你了
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务