题解 | 进制转换2

进制转换2

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

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

vector<int> div(vector<int>a, int m, int n, int& r) {
    int t = 0;
    vector<int>c;
    for (int i = a.size()-1; i >=0 ; i--) {
        c.push_back((t * m + a[i]) / n);
        t = (t * m + a[i]) % n;
    }
    r = t;
    reverse(c.begin(), c.end());
    //试除法去除前导0有点不一样
    while (c.size() >= 1 && c.back() == 0)c.pop_back();
    return c;
}
int main() {
    int m, n;
    string num;
    while (cin >> m >> n >> num) { // 注意 while 处理多个 case
        int r = 0;
        vector<int>a;
        vector<int>res;
        for (int i = num.size() - 1; i >= 0; i--) {
            if (num[i] >= '0' && num[i] <= '9')
                a.push_back(num[i] - '0');
            else
                a.push_back(num[i] - 'A' + 10);
        }
        while (!a.empty()) {
            int r = 0;
            a = div(a, m, n, r);
            res.push_back(r);
        }
        for (int i = res.size() - 1; i >= 0; i--)
            cout << res[i];
        puts("");
    }
}
// 64 位输出请用 printf("%lld")

全部评论

相关推荐

点赞 评论 收藏
分享
野猪不是猪🐗:现在的环境就是这样,供远大于求。 以前卡学历,现在最高学历不够卡了,还要卡第一学历。 还是不够筛,于是还要求得有实习、不能有gap等等... 可能这个岗位总共就一个hc,筛到最后还是有十几个人满足这些要求。他们都非常优秀,各方面都很棒。 那没办法了,看那个顺眼选哪个呗。 很残酷,也很现实
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务