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;	
}
    原文作者:进制转换
    原文地址: https://blog.csdn.net/weifuliu/article/details/78866017
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞