#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 个赞