10进制 VS 2进制

10进制 VS 2进制

http://www.nowcoder.com/questionTerminal/fd972d5d5cf04dd4bb4e5f027d4fc11e

思路

比如 173,二进制形式是 10101101,我们在求二进制形式的时候求出来的结果其实就是倒着的,那么我们刚好就可以直接算出来逆序的二进制形式对应的值。

但是因为 A 可能是一个非常大的数,所以直接算不合适,所以我们需要记住一个进制转换的模板!很重要,划重点。这其实是一个模拟竖式除法的过程(数字 num 转换成 n 进制就是一个除以 n 的过程)

#include<iostream>
#include<algorithm>

using namespace std;

// 由m进制转换成n进制
string conversion(string num, int m, int n){
    int l = num.size(), k = 0;
    string ans = "";
    for(int i = 0; i < l; ){
        k = 0;
        // k是 a/b 的余数,因为在 a/b 的过程中我们要不断更新商的值,所以要不断更新 num[j]
        // 单纯求余数的话我们 k * m + num[j] 计算若干次就够了
        for(int j = i; j < l; j ++){
            int t = (k * m + num[j] - '0') % n;
            num[j] = (k * m + num[j] - '0') / n + '0';
            k = t;
        }
        ans += (k + '0');
        // 如果 num[i] == 0 说明商在该位上没有值,比如 0001,那值就是 1,跳过去就好了
        while(num[i] == '0') i ++;
    }
    return ans;
}

int main(){
    string num;
    while (cin >> num){
        string temp = conversion(num, 10, 2);
        temp = conversion(temp, 2, 10);
        reverse(temp.begin(), temp.end());
        cout << temp << endl;
    }
}
算法题解 文章被收录于专栏

不定期更新一些算法题解,有什么问题可以随时留言~

全部评论

相关推荐

码农索隆:有点耳熟,你们是我教过最差的一届
点赞 评论 收藏
分享
06-20 19:40
中原工学院 Java
网络存储:十几天不会让你拉人办卡就结束了吧?
点赞 评论 收藏
分享
06-13 10:15
门头沟学院 Java
想去夏威夷的大西瓜在...:我也是27届,但是我现在研一下了啥项目都没有呀咋办,哎,简历不知道咋写
点赞 评论 收藏
分享
评论
35
5
分享

创作者周榜

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