C++实现任意进制互转(递归版)

目录

1.代码部分

2.总结部分

2.1 目前的问题:

有任何bug以及改进建议欢迎评论区留言!!!


1.代码部分

话不多说,直接上代码:

#include<iostream>
#include<cstring>
#include<cmath>
#define L_STUDIO_ACE 2009
using namespace std;
typedef unsigned long long int op;//()
char d[16] = { '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F' };//取余后所得的对应数字 
op leave(char x[1919], op y) {//leave函数 将待转换进制的数据转成10进制
	op h = 0, k = strlen(x);//h储存转换的10进制数据 k储存目标数据的有效位数 
	for (op i = k; i > 0; i--) {//for遍历每一位数字 
		if ('0' <= x[i - 1] && x[i - 1] <= '9') {
			h += (x[i - 1] - 48) * pow(y, k - i);//k-i为位权 
		}
		else if ('A' <= x[i - 1] && x[i - 1] <= 'F') {
			h += (x[i - 1] - 55) * pow(y, k - i);
		}
		else {
			cout << "DATA ERROR!";
			return -1;//错误校验码 
			break;//退出循环
		}//分类讨论
	}
	return h;
}
void back(op a, op b) {//back函数 将10进制数据转换为目标进制 
	if (a == -1) {
		return;//收到错误校验码后停止执行 
	}
	op r;//r储存该位数字 
	r = a % b;
	a /= b;//短除法
	if (a) {
		back(a, b);//递归 
	}
	cout << d[r];//由于是倒序读取所以直接输出 
	return;
}
int main() {
	char l[1919];//char数组 方便输入和操作
	op s, p;
	cout << "进制转换器v1.4.5 Made By L_STUDIO_ACE 2023.3.26 SUN." << endl;
	cout << "请输入待转换进制的数据和待转换的进制(仅支持2-16进制的正整数!!!)" << endl;//目前仅支持正整数 
	cin >> l >> s;
	cout << "请输入目标进制" << endl;
	cin >> p;//分别输入 
	cout << "将 " << s << " 进制的 " << l << " 转换成 " << p << " 进制的结果为 " << endl;
	back(leave(l, s), p);//leave函数所得的值直接接入back函数作为转换的数据 
	cin.get();
	cin.get();//()
	return 0;
}

v1.4.5

2.总结部分

2.1 目前的问题:

        1.二进制输入3仍然可以正常输出(原因:本程序逻辑为将待转换进制的数据先转换为10进制,之后再转换为目标进制,而在转换为10进制的过程中未加入判断函数,最后导致了bug)

        2.个人认为运行效率较低,有待优化

有任何bug以及改进建议欢迎评论区留言!!!

[已补档]

Made By L_STUDIO_ACE 2023/3/26 SUN.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值