便捷式进制转换(只支持2转8,2转10)

#include <bits/stdc++.h>
using namespace std;
void te(){//2-8
	string a;
	cout<<endl;
	cout<<"您想转换的数是:";
	cin>>a;
	int cnt=0;
	int ax[100];
	while(a.size()%3!=0){
		a='0'+a;
	}
	for(int i=0;i<a.size();i+=3){
		ax[i]=(a[i]-'0')*4+(a[i+1]-'0')*2+(a[i+2]-'0')*1;
		cnt++;
	}
	cout<<"转换成功! 转换出来的数是(这里写几进制,如八进制):"; 
	for(int i=0;i<cnt;i++){
		cout<<ax[i];
	}
}
void tt(){//2-10
	char a[105];
	cout<<endl;
	cout<<"您想转换的数是:";
	cin>>a;
	int sum=0;
	int x=strlen(a)-1;
	for(int i=0;i<=x;i++){
		sum+=(a[i]-'0')*pow(2,x-i);
	}
	cout<<endl; 
	cout<<"转换成功! 转换出来的数是:"; 
	cout<<sum;
}
int main()
{
	cout<<"请输入您想要转换的进制(这里写几进制,如八进制):"; 
	cout<<endl; 
	string x;
	cin>>x;
	if(x=="八进制"){
	 	te();
	}
	if(x=="十进制"){
		tt();
	}
	return 0;
}

看我的进制转换:
足足可以转换2~36!

#include <bits/stdc++.h>
using namespace std;
int main() {
	int num, ans = 0;
	string c;
	int n, m;
	printf("请依次输入 初始进制 转换进制 初始数值\n");
	printf("注:均使用阿拉伯数字,初始数值中大于9的数字均使用A,B,C等字母代替\n若不遵守以上规则,则本机器会报错!\n"); 
	while(true){
		cin >> n >> m >> c;
		if(n > 1 && n < 37 && m > 1 && n < 37)break;
		printf("不好意思,本机器目前仅支持2~36之间的进制转换,请重新输入:\n"); 
	}
	for(int i = 0; i < c.size(); i++) {
		if (c[i] >= '0' && c[i] <= '9') num = c[i] - '0';
		else num = c[i] - 'A' + 10;
		ans = ans * n + num;
	}
	char arr[1005];
	int cnt = 0;
	while (ans != 0) {
		num = ans % m;
		ans /= m;
		if (num<10) {
			arr[cnt++] = num + '0';
		} else {
			arr[cnt++] = num + 'A' - 10;
		}
	}
	printf("结果为:"); 
	for (int i = cnt - 1; i >= 0; i--){
		cout << arr[i];
	}
	return 0;
}
2 个赞