#include
#include
#include
#include
// 26 进制的字符映射
std::string base26 = “ABCDEFGHIJKLMNOPQRSTUVWXYZ”;
// 将 26 进制数转换为十进制
long long base26ToDecimal(std::string num) {
long long decimal = 0;
int len = num.size();
for (int i = 0; i < len; i++) {
char digit = num[i];
int digitValue = base26.find(digit);
if (digitValue == std::string::npos) {
std::cout << “输入的不是有效的 26 进制数!” << std::endl;
return -1;
}
decimal += digitValue * std::pow(26, len - i - 1);
}
return decimal;
}
// 将十进制转换为 26 进制
std::string decimalToBase26(long long decimal) {
std::string result;
while (decimal > 0) {
int remainder = decimal % 26;
result += base26[remainder];
decimal /= 26;
}
std::reverse(result.begin(), result.end());
return result;
}
// 加法
std::string addBase26(std::string num1, std::string num2) {
long long decimal1 = base26ToDecimal(num1);
long long decimal2 = base26ToDecimal(num2);
if (decimal1 == -1 || decimal2 == -1) {
return “错误: 无效的输入”;
}
long long sum = decimal1 + decimal2;
return decimalToBase26(sum);
}
// 减法
std::string subtractBase26(std::string num1, std::string num2) {
long long decimal1 = base26ToDecimal(num1);
long long decimal2 = base26ToDecimal(num2);
if (decimal1 == -1 || decimal2 == -1) {
return “错误: 无效的输入”;
}
long long difference = decimal1 - decimal2;
if (difference < 0) {
return “错误: 结果为负数”;
}
return decimalToBase26(difference);
}
// 乘法
std::string multiplyBase26(std::string num1, std::string num2) {
long long decimal1 = base26ToDecimal(num1);
long long decimal2 = base26ToDecimal(num2);
if (decimal1 == -1 || decimal2 == -1) {
return “错误: 无效的输入”;
}
long long product = decimal1 * decimal2;
return decimalToBase26(product);
}
// 除法
std::string divideBase26(std::string num1, std::string num2) {
long long decimal1 = base26ToDecimal(num1);
long long decimal2 = base26ToDecimal(num2);
if (decimal1 == -1 || decimal2 == -1) {
return “错误: 无效的输入”;
}
if (decimal2 == 0) {
return “错误: 除数不能为 0”;
}
long long quotient = decimal1 / decimal2;
return decimalToBase26(quotient);
}
// 平方根
std::string squareRootBase26(std::string num) {
long long decimal = base26ToDecimal(num);
if (decimal == -1) {
return “错误: 无效的输入”;
}
if (decimal < 0) {
return “错误: 不能计算负数的平方根”;
}
double root = std::sqrt(decimal);
return decimalToBase26(static_cast(root));
}
// 幂运算
std::string powerBase26(std::string num, int exponent) {
long long decimal = base26ToDecimal(num);
if (decimal == -1) {
return “错误: 无效的输入”;
}
long long powerResult = static_cast(std::pow(decimal, exponent));
return decimalToBase26(powerResult);
}
// 阶乘
std::string factorialBase26(std::string num) {
long long decimal = base26ToDecimal(num);
if (decimal == -1) {
return “错误: 无效的输入”;
}
if (decimal < 0) {
return “错误: 负数没有阶乘”;
}
long long fact = 1;
for (long long i = 1; i <= decimal; i++) {
fact *= i;
}
return decimalToBase26(fact);
}
int main() {
int choice;
std::string num1, num2, result;
do {
std::cout << "1. 加法" << std::endl;
std::cout << "2. 减法" << std::endl;
std::cout << "3. 乘法" << std::endl;
std::cout << "4. 除法" << std::endl;
std::cout << "5. 平方根" << std::endl;
std::cout << "6. 幂运算" << std::endl;
std::cout << "7. 阶乘" << std::endl;
std::cout << "8. 继续" << std::endl;
std::cout << "9. 退出" << std::endl;
std::cout << "请选择: ";
std::cin >> choice;
switch (choice) {
case 1:
std::cout << "请输入第一个 26 进制数: ";
std::cin >> num1;
std::cout << "请输入第二个 26 进制数: ";
std::cin >> num2;
result = addBase26(num1, num2);
std::cout << "结果: " << result << std::endl;
break;
case 2:
std::cout << "请输入被减数(26 进制): ";
std::cin >> num1;
std::cout << "请输入减数(26 进制): ";
std::cin >> num2;
result = subtractBase26(num1, num2);
std::cout << "结果: " << result << std::endl;
break;
case 3:
std::cout << "请输入第一个 26 进制数: ";
std::cin >> num1;
std::cout << "请输入第二个 26 进制数: ";
std::cin >> num2;
result = multiplyBase26(num1, num2);
std::cout << "结果: " << result << std::endl;
break;
case 4:
std::cout << "请输入被除数(26 进制): ";
std::cin >> num1;
std::cout << "请输入除数(26 进制): ";
std::cin >> num2;
result = divideBase26(num1, num2);
std::cout << "结果: " << result << std::endl;
break;
case 5:
std::cout << "请输入要计算平方根的 26 进制数: ";
std::cin >> num1;
result = squareRootBase26(num1);
std::cout << "结果: " << result << std::endl;
break;
case 6:
std::cout << "请输入底数(26 进制): ";
std::cin >> num1;
int exponent;
std::cout << "请输入指数: ";
std::cin >> exponent;
result = powerBase26(num1, exponent);
std::cout << "结果: " << result << std::endl;
break;
case 7:
std::cout << "请输入要求阶乘的 26 进制数: ";
std::cin >> num1;
result = factorialBase26(num1);
std::cout << "结果: " << result << std::endl;
break;
case 8:
std::cout << "继续进行其他操作..." << std::endl;
break;
case 9:
std::cout << "退出系统!" << std::endl;
break;
default:
std::cout << "无效的选择,请重新输入!" << std::endl;
}
} while (choice!= 9);
return 0;
}