m进制数转十进制数和十进制数转m进制数(m<=16)

来源:互联网 发布:施乐2011网络设置 编辑:程序博客网 时间:2024/06/07 02:58

m进制数转十进制数(乘权取余法)

#include<iostream>#include<cmath>using namespace std;int main(){    int n,m;    int ans=0;    cin>>n>>m;    for(int i=6;i>=0;i--){        int a=n/pow(10,i);   //1式        int b=n/pow(10,i+1);  //2式        int c=pow(m,i);      // 3式        ans+=(a-b*10)*c;         //4式    }    cout<<ans<<endl;    return 0;   }

1~4式主要是为了单步调试方便,可以写成一步。
但这只对于10进制以内的数转为十进制数有作用。比如16进制中单位存在A~F用int型则不能准确表示了。
为适应更高数制,修正后的代码如下(当然为了题目要求这里最高数制可以转换到16进制数):

#include<iostream>#include<cmath>#include<string>using namespace std;int main(){    string n;    int m;    int ans=0;    cin>>n>>m;    int q=n.size();    for(int i=0;i<q;i++){        if(n[i]<=57&&n[i]>=48)            ans+=(n[i]-48)*pow(m,q-i-1);        if(n[i]<=70&&n[i]>=65)            ans+=(n[i]-55)*pow(m,q-i-1);        if(n[i]<=102&&n[i]>=97)            ans+=(n[i]-87)*pow(m,q-i-1);    }    cout<<ans<<endl;    return 0;   }

十进制数转m进制数(反向取余法)

#include<iostream>#include<cmath>#include<string>using namespace std;int main(){    int n,m;    cin>>n>>m;    char num[100];    int res=n,i=0,cnt,p;    while(res!=0){        res=n/m;        p=n%m;        if(p==10)num[i++]='A';        else if(p==11)num[i++]='B';        else if(p==12)num[i++]='C';        else if(p==13)num[i++]='D';        else if(p==14)num[i++]='E';        else if(p==15)num[i++]='F';        else num[i++]=p+48;        n=res;    }    cnt=i;    for(i=cnt-1;i>=0;i--)        cout<<num[i];    cout<<endl;    return 0;   }