我是靠谱客的博主 故意萝莉,最近开发中收集的这篇文章主要介绍m进制数转十进制数和十进制数转m进制数(m小于等于16),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

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;
}

最后

以上就是故意萝莉为你收集整理的m进制数转十进制数和十进制数转m进制数(m小于等于16)的全部内容,希望文章能够帮你解决m进制数转十进制数和十进制数转m进制数(m小于等于16)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部