题解 | #进制转换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;
}