P1143 进制转换

 

题目描述

请你编一程序实现两种不同进制之间的数据转换。

输入格式

共三行,第一行是一个正整数,表示需要转换的数的进制&n(2≤n≤16)&,第二行是一个n进制数,若n>10则用大写字母A-F表示数码10-15,并且该n进制数对应的十进制的值不超过1000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)m(2m16)。

输出格式

一个正整数,表示转换之后的mm进制数。

输入输出样例

输入 #1
16
FF
2
输出 #1
11111111


题目大意:

给你一个N进制的数,让你转换成M进制的数。

 

分析思路:

用N进制转M进制会很麻烦,我们先把N进制的数转换成10进制的数,再把转换成10

进制的数转换成M进制。利用十进制过度一下。

 

CODE:

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;//头文件 
long long n,m;
string s;
long long len,he,sum,zs=1;
long long mod,cd;
long long a[101000];
int main(){
    cin>>n;
    cin>>s;
    cin>>m;
    len=s.length();
    //把N进制数转换为十进制
    for(int i=len-1;i>=0;i--){ 
        if(s[i]>='0'&&s[i]<='9'){//求出是s[i]所代表的数字 
            he=s[i]-'0';
        }
        if(s[i]>='A'&&s[i]<='Z'){
            he=s[i]-'A'+10;
        }
        sum+=he*zs;//把每一位的十进制数累加 
        zs*=n; 
    }
    //把转换成的十进制数转换为M进制 
    while(sum!=0){
        mod=sum%m;//取模 
        sum/=m;
        cd++;
        a[cd]=mod;//求出每一位的余数 
    }
    for(int i=cd;i>=1;i--){//倒序输出 
        if(a[i]>=10){
            cout<<char(a[i]+55);
        }
        else{
            cout<<a[i];
        }
    }
    return 0;
}

 

 

 

 

 

posted @ 2020-05-08 08:31  shanxx  阅读(294)  评论(0编辑  收藏  举报