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