题解 | #10进制 VS 2进制#

10进制 VS 2进制

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

难点在于字符串实现加法和乘除

#include <iostream>
#include <vector>
using namespace std;
string divide(string str) {
    int remain = 0;
    string result;
    for (int i = 0; i < str.size(); i++) {
        int temp = remain * 10 + str[i] - '0';
        remain = temp % 2;
        char tempChar = (temp / 2 + '0');
        result += tempChar;
    }
    if (result == "0") return "";
    else {
        int pos = 0;
        while (result[pos] == '0') pos++;
        return result.substr(pos);
    }
}
string multiple(string str) {
    string result;
    int carry = 0;
    for (int i = str.size() - 1; i >= 0; i--) {
        int temp = (str[i] - '0') * 2 + carry;
        carry = temp / 10;
        char tempChar = (temp % 10 + '0') ;
        result = tempChar + result;
    }
    if (carry != 0) result = "1" + result;
    return result;
}
string add(string str, int x) {
    string result;
    int carry = x;
    for (int i = str.size() - 1; i >= 0; i--) {
        int temp = str[i] - '0' + carry;
        carry = temp / 10;
        char tempChar = (temp % 10 + '0');
        result = tempChar + result;
    }
    if (carry != 0) result = "1" + result;
    return result;
}
int main() {
    string a;
    while (cin >> a ) { // 注意 while 处理多个 case
        vector<int> binary;
        while (a.size() > 0) {
            binary.push_back((a[a.size() - 1] - '0') % 2);
            a = divide(a);
        }
        string b = "0";
        for (int i = 0; i < binary.size(); i++) {
            b = multiple(b);
            b = add(b, binary[i]);
        }
        cout << b << endl;
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

头像
昨天 20:19
已编辑
门头沟学院 人工智能
本文略长,献给身处双非、学院本科的低年级依旧陷入迷茫的同学,一个参考。夹杂强烈主观因素,若观点不同,仅当笑料。近日,工作之余的午休时间给母校的学弟学妹进行了宣讲,同时也接受了牛客的访谈,不约而同的触发了两个关键词考研,就业。现象今年和去年,认识的学弟学妹,来自知某、抖某、牛客等系列的学弟学妹,这次宣讲,约有20个学弟学妹来加了我的联系方式,向我取经,聊聊未来,聊聊想法。我这里简单概括一下。1.现在很迷茫,大方向摇摆就业还是考研,但是倾向考研。小方向摇摆竞赛和项目,不知道怎么去做,不知道怎么开始。2.考研的直接目的绝大多数都是为了(混)学历,根本目的就是提高就业竞争力。3.我把他们都拉了个群,在...
牛客85294058...:“私聊能够滔滔不绝,而拉了一个小群之后就完全一声不吭”个人观点这跟从小到大“不要浪费大家时间”的社会环境有关:个人化的提问,如果你上学时有留心、或者参加QA环节多,会注意到这种做法经常是被人骂的。要营造让大家开口的氛围和做出欢迎讨论的议题设置还是比较难的,期待方法探索。
投递大连飞创信息技术有限公司等公司10个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务