公式法 任意进制转化

 

 

//任意进制相互转化 不输出前导
#include <bits/stdc++.h>
using namespace std;
const int NUM=10;
int z[40],num; 

//p进制数x转化为十进制数y 
//数字展开 
int CP_xTo_10y(int p,int x){
	int y=0,p0=1;
	while(x!=0){
	y+=(x%10)*p0;//取x的个位 
	x=x/10;//去掉x的个位
	p0=p0*p;
	} 
	return y;
}

//将十进制数y转化为q进制,结果存放在数组z  
//除基取余 
int C10_yTo_Pz(int y,int q){	
	num=0;
	do{
		z[num++]=y%q;// 取余
		y/=q;//除基
	}while(y!=0);//商为0停止循环
	for(int i=num-1;i>=0;i--) {  
            switch(z[i]){  
            case 10:cout<<'A';break;  
            case 11:cout<<'B';break;  
            case 12:cout<<'C';break;  
            case 13:cout<<'D';break;  
            case 14:cout<<'E';break;  
            case 15:cout<<'F';break;  
            default :cout<<z[i];break;  
        }  
	}
}
int main(){
	int m,n,x,x1;
	//m进制数x转化为n进制数 并输出 
	while(cin>>m>>n>>x){
		cout<<m<<"进制转化为"<<n<<"进制:"<<"原始数据为:"<<x<<endl ;
		cout<<"转化结果为:";
		memset(z,0,NUM);
		//m进制数x直接转化为10进制数 
		if(n==10){
			cout<<CP_xTo_10y(m,x)<<endl;
		}
		else if(m==10){
			C10_yTo_Pz(x,n);//10进制转化为n进制 
			cout<<endl;	
		}
		else{
			//m进制数x先转化为10进制数  
			x1=CP_xTo_10y(m,x);
			//10进制转化为n进制 
			C10_yTo_Pz(x1,n);//10进制转化为n进制 
			cout<<endl;	
		} 
	}
	return 0;
}

 

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Clark-dj

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值