题解 | #进制转换2#

进制转换2

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

思路

使用短除法 注意初始化的问题

AC代码

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

//短除法
int main(){
    int m,n;
    cin >> m >> n;
    string s;
    cin >> s;
    if(s=="0"){
        cout << 0;
        return 0;
    }
    vector<int> a;
    for(int i=s.size()-1;i>=0;i--){
        if(s[i]>='A'){
            a.push_back(s[i]-'A'+10);
        }else{
            a.push_back(s[i]-'0');
        }
    }
    string ans="";
    while(a.size()){
        int t=0; //每次进行除法之前都要初始化成0
        for(int i=a.size()-1;i>=0;i--){
            a[i]=t*m+a[i];
            t=a[i]%n;
            a[i]=a[i]/n;
        }
        if(t<10){
            ans+=to_string(t);
        }else{
            ans += t-10+'a';
        }
        while(a.size() && a.back()==0) a.pop_back();
    }
    reverse(ans.begin(),ans.end());
    cout << ans << endl;
    return 0;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务