1.输出操作菜单:
A. 5进制数---> 8进制数
B. 5进制数---> 10进制数
C. 5进制数---> 12进制数
D. 5进制数---> 16进制数
E. 8进制数---> 5进制数
F. 8进制数---> 10进制数
G. 8进制数---> 12进制数
……
0.退出
// g++ -Wall -std=c++17 main.cpp
#include <iostream>
#include <tuple>
#include <vector>
int to_int(const std::string &s, int b)
{
int n = 0;
for (auto c : s)
n = n * b + c - '0';
return n;
}
std::string to_string(int n, int b)
{
const char *c = "0123456789ABCDEF";
std::string s;
do
{
auto m = n % b;
s.push_back(c[m]);
n /= b;
} while (n != 0);
return std::string(s.rbegin(), s.rend());
}
int main()
{
auto bases = {5, 8, 10, 12, 16};
std::vector<std::tuple<int, int>> conversions;
for (auto src : bases)
{
for (auto tar : bases)
{
if (src == tar)
continue;
conversions.push_back({src, tar});
}
}
while (1)
{
int index = 0;
for (auto [src, tar] : conversions)
{
std::cout << static_cast<char>('A' + index) << ". " << src << "进制数 ---> " << tar << "进制数\n";
index++;
}
std::cout << "0. 退出\n";
printf("输入选项: ");
char ch;
std::cin >> ch;
if (ch == '0')
break;
index = ch - 'A';
auto [src, tar] = conversions[index];
std::cout << "输入" << src << "进制数: ";
std::string string;
std::cin >> string;
int num = to_int(string, src);
std::cout << "转换为" << tar << "进制数结果是: " << to_string(num, tar) << std::endl;
}
return 0;
}