题解 | #进制转换#

进制转换

http://www.nowcoder.com/practice/0337e32b1e5543a19fa380e36d9343d7

关键在于对于字符串模拟的数字,不断的进行对2取模,对2整除的运算,即可求出结果。

对于取模运算,可以转换为对字符串低位进行取模的运算,二者功能上是等价的。

对于整除运算,需要重写一个函数来完成字符串除法的功能。将字符串从高到低逐位除以除数,如果某位不能整除,那么就保留该位数除以除数的余数,余数乘以10以后和低一位的一起进行处理。这样就可以模拟出除法的效果,但是也会导致出现多个前置0。

#include <iostream>
#include <string>
#include <stack>

using namespace std;

string Divide(string s, int x) {
    int remainder = 0;
    for (int i = 0; i < s.size(); i++) {
        int cur = remainder * 10 + s[i] - '0';
        s[i] = cur / x + '0';
        remainder = cur % x;
    }
    int pos = 0;
    while (s[pos] == '0') {
        pos++;
    }
    return s.substr(pos);
}

string convertFunc(string s, int x) {
    stack<int> sck;
    while (s.size() != 0) {
        int bit = (s[s.size()-1] - '0') % 2;
        sck.push(bit);
        s = Divide(s, x);
    }
    string res;
    while (!sck.empty()) {
        res.push_back(sck.top()+'0');
        sck.pop();
    }
    return res;
}

int main()
{
    string s;
    while (cin >> s) {
        cout << convertFunc(s, 2) << endl;
    }
    return 0;
}
全部评论
nb兄弟
点赞 回复 分享
发布于 2022-02-28 16:59

相关推荐

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