题解 | #进制转换2#
进制转换2
https://www.nowcoder.com/practice/ae4b3c4a968745618d65b866002bbd32
//KY235 进制转换2
//将M进制的数X转换为N进制的数输出。
#include<cstdio>
#include<bits/stdc++.h>
#include <cmath>
using namespace std;
int main(){
char arr[1000];
vector<char> arr1;
int M,N;
scanf("%d%d",&M,&N);
scanf("%s",arr);
string str = arr;//c->c++
int len = str.size();
// printf("%d",len);
if(M == 10){
// //string->int 方法一
// int sum = 0;
// for(int i =0;i<len;i++){
// sum = 10*sum + (str[i] - '0');
// }
//方法二 atoi函数
long long sum = atoi(str.c_str());//注意将str c++风格转换成c风格
int count=0 , b;
while(sum>0){
b = sum%N;
count++;
arr1.push_back(b);
sum = sum/N;
}
for(int i = count;i>0;i--){//逆序输出
printf("%c",arr1[i-1]);
}
printf("\n");
}else{
long long sum =0;
for(int i = 0 ; i < len ; ++i ){//转换成十进制
int dig;
if(str[i] >= '0' && str[i]<='9'){//小于10的转化成数字型
dig = str[i] - '0';
}else if(str[i] >= 'A' && str[i]<='Z'){
dig = str[i] -'A' + 10;//因为输入的字母只会是大写字母
}
// sum +=str[i] * pow(M,i);//要将str[i]转换成数字值 应改为str[i]-'0'
sum +=dig * pow(M,len-i-1);//len-i-1才是从左边开始第一位的次幂
}
int count=0 , b;
while(sum>0){
b = sum%N;
count++;
arr1.push_back(b);
sum = sum/N;
}
for(int i = count;i>0;i--){//逆序输出
printf("%d",arr1[i-1]);
}
printf("\n");
}
}

查看9道真题和解析