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

    }
    


}

全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务