这是一个数据结构经典题目,不同进制之间的相互转换,这里用了递归的解法。
二进制与十进制之间可以相互转化,二进制、八进制、十六进制之间也可以相互转换。但是十进制转八进制和十六进制则需要二进制作为中间桥梁。
复制源码直接运行即可
#include<bits/stdc++.h>
#include<Windows.h>
using namespace std;
void MOD2(int data[], const int& num, int& i)
{
if (num == 0)
return;
else
{
data[i] = num % 2;
i++;
MOD2(data, num / 2, i);
}
}
void DtoB(int data[], const int& num, int& i)
{
MOD2(data, num, i);
for (int j = i - 1; j >= 0; j--)
cout << data[j];
}
void MOD8(int data[], const int& num, int& i)
{
if (num == 0)
return;
else
{
data[i] = num % 8;
i++;
MOD8(data, num / 8, i);
}
}
void DtoO(int data[], const int& num, int& i)
{
MOD8(data, num, i);
for (int j = i - 1; j >= 0; j--)
cout << data[j];
}
void MOD16(int data[], const int& num, int& i)
{
if (num == 0)
return;
else
{
data[i] = num % 16;
i++;
MOD16(data, num / 16, i);
}
}
void DtoH(int data[], const int& num, int& i)
{
MOD16(data, num, i);
for (int j = i - 1; j >= 0; j--)
{
if (data[j] >= 0 && data[j] < 10)
cout << data[j];
else if (data[j] == 10)
cout << "A";
else if (data[j] == 11)
cout << "B";
else if (data[j] == 12)
cout << "C";
else if (data[j] == 13)
cout << "D";
else if (data[j] == 14)
cout << "E";
else if (data[j] == 15)
cout << "F";
}
}
void BtoD(const string& str, int& sum, int& i)
{
if (i == str.length())
{
cout << sum << endl;
}
else
{
if(str.at(i) == '1')
sum += (int)pow(2, str.length() - i - 1);
i++;
BtoD(str, sum, i);
}
}
void Menu()
{
cout << "请选择进制转换:" << endl;
cout << "1-> 十 进制转 二 进制" << endl;
cout << "2-> 十 进制转 八 进制" << endl;
cout << "3-> 十 进制转 十六 进制" << endl;
cout << "4-> 二 进制转 十 进制" << endl;
cout << "0-> 退出系统" << endl;
}
int main()
{
int* data = new int[10000];
int i = 0, sum = 0;
int operate;
int c;
string d;
bool flag = true;
while (flag)
{
system("cls");
Menu();
i = 0;
sum = 0;
cin >> operate;
switch (operate)
{
case 1:
cout << "请输入待转换的数字:";
cin >> c;
DtoB(data, c, i);
system("pause");
break;
case 2:
cout << "请输入待转换的数字:";
cin >> c;
DtoO(data, c, i);
system("pause");
break;
case 3:
cout << "请输入待转换的数字:";
cin >> c;
DtoH(data, c, i);
system("pause");
break;
case 4:
cout << "请输入待转换的数字:";
cin >> d;
BtoD(d, sum, i);
system("pause");
break;
case 0:
flag = false;
cout << "已退出" << endl;
break;
default:
cout << "无效数据,请重新输入!" << endl;
system("pause");
break;
}
}
delete[] data;
return 0;
}
这是数据结构经典题目,介绍不同进制相互转换的递归解法。二进制与十进制可互转,二进制、八进制、十六进制间也能转换,不过十进制转八进制和十六进制需以二进制为中间桥梁,复制源码可直接运行。
670

被折叠的 条评论
为什么被折叠?



