n进制数q转换成m进制数

来源:互联网 发布:js 数组删除元素方法 编辑:程序博客网 时间:2024/05/22 07:59

题目描述 Description
将n进制数q转换成m进制数 n和m<=36 q转换为10进制<=10^10

输入描述 Input Description
共两行 第一行 n和q 第二行 m

输出描述 Output Description
共一个数 表示n进制数q的m进制

样例输入 Sample Input
样例1:
10 23
13
样例2:
2 1010
7

样例输出 Sample Output
样例1:1A
样例2:13

数据范围及提示 Data Size & Hint
用反向取余法和乘权累积法

分析:问题可拆分为两个问题,然后合并。

  1. 将n进制的q转换为10进制的w
  2. 将10进制的w转化为m进制的ans

所以,即有代码如下:
首先运用乘权累加法解决第一个问题(因为最后要合并,所以最好将其写成主函数调用函数的形式):将m进制的n转换为10进制的ans

#include<iostream>using namespace std;int power(int m,int n){//power函数用于计算m的n次方    int ans=1;    if(m==0) return 0;    else if(m==1) return 1;    for(int i=0;i<n;i++) ans*=m;    return ans;}int change(int m,string n){    int ans=0;    for(int i=0;i<n.size();i++){        if(n[i]-'9'<=0) ans+=(n[i]-'0')*power(m,n.size()-i-1);        else ans+=(n[i]-'A'+10)*power(m,n.size()-i-1);    }    return ans;}int main(){    int m;    string n;    cin>>m>>n;    cout<<change(m,n);    return 0;}

接着运用反向取余法解决第二个问题:将10进制的n转化为m进制

#include<iostream>using namespace std;int main(){    int n,m,a[2000]={0},i=0;    cin>>n>>m;    while(n!=0){//将每位数存入数组        a[i++] = n%m;        n /= m;    }    i--;    for(;i>=0;i--){//输出数组,大于10的用字母表示        if(a[i]>9) cout<<(char)(a[i]-10+'A');        else cout<<a[i];    }    return 0;}

最后两个问题合并即可:

#include<iostream>using namespace std;int power(int m,int n){    int ans=1;    if(m==0) return 0;    else if(m==1) return 1;    for(int i=0;i<n;i++) ans*=m;    return ans;}int change(int m,string n){//将m进制的n转换为10进制的ans     int ans=0;    for(int i=0;i<n.size();i++){        if(n[i]-'9'<=0) ans+=(n[i]-'0')*power(m,n.size()-i-1);        else ans+=(n[i]-'A'+10)*power(m,n.size()-i-1);    }    return ans;}int main(){    int n,w,m,a[2000]={0},i=0;    string q;    cout<<"欢迎使用进制转换器"<<endl<<"使用说明(如您需要将2进制的1010转换为10进制则输入):\n2 1010\n10";     while(true){        cout<<endl<<"请输入进制与数:" ;         cin>>n>>q;        cout<<"请输入您需要转换的进制:";        cin>>m;        w=change(n,q);        while(w!=0){            a[i++] = w%m;            w /= m;        }        i--;        for(;i>=0;i--){            if(a[i]>9) cout<<(char)(a[i]-10+'A');            else cout<<a[i];        }    }    return 0;}