任意进制间的转换

以下的c++代码可以实现任意进制间的转换;

思路:以十进制为跳板,先将其他进制的数字转换为十进制,再将十进制转换为其他进制。

/*
*create by chenzj36 
*on 2018/8/1
*实现任意进制间的转换
*/

#include<iostream>
using namespace std;

int int_pow(int x, int y) {//实现幂运算,<iostream>也提供pow()函数
	int result = 1;
	for (int i = 1 ; i <= y; i++) {
		result *= x;
	}
	return result;
}

void dtoo(int dnum, int jz) {//十进制转其他任意进制
	char rnum[100];//利用字符数组存“数字”,按位处理更方便;
	int i=0, j;
	while (dnum >= jz) {//大于等于欲转化的进制,继续除,取余。
		if (dnum%jz <= 9) {
			rnum[i++] = dnum % jz + '0';//数字转换为字符
		}
		else {
			rnum[i++] = dnum % jz - 10 + 'A';//大于等于10的部分,用大写字母。
		}
		dnum = dnum / jz;//取完余数,进行除法操作。
	}
	if (dnum%jz <= 9) {
		rnum[i++] = dnum + '0';
	}
	else {
		rnum[i++] = dnum - 10 + 'A';
	}
	cout << "转换为" << jz << "进制:";
	for (j = i-1; j >= 0; j--) {//将字符数组逆序输出
		cout << rnum[j];
	}
	cout <<endl;
}
int otod(char onum[], int jz) {//其他进制转十进制
	int n = 0;
	int res = 0;
	for (int i = 0; onum[i] != '\0'; i++) {//确定字符数组存储的位数
		n++;
	}
	for (int i = 0; i < n; i++) {
		int bas;
		if (onum[i] >= 'A') {//将大写字母转为数字
			bas = onum[i] - 'A' + 10;
		}
		else {//将“字符”转“数字”
			bas = onum[i] - '0';
		}
		res += bas * int_pow(jz, n-i-1);//权值*位对应的大小
	}
	return res;//返回十进制的数
}

void main() {
	while (1) {
		int orin,jz1,jz2;
		char onum[100];
		cout << "请输入要转换的数字(字母大写):";//输入任意的“数”
		cin >> onum;
		cout << "请输入原始数据的进制:";//确定上面数字的进制
		cin >> jz1;
		cout << "请输入要转换的进制:";//输入要转化的进制
		cin >> jz2;
		dtoo(otod(onum, jz1), jz2);//调用函数,实现进制转换
	}
}

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值