实现一个数制转换工具

#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>

// 二进制转十进制
// 通过遍历二进制字符串,从右到左计算每个位上的值,并累加到decimal变量中
int binaryToDecimal(const std::string& binary) {
	int decimal = 0, base = 1;
	for (int i = binary.length() - 1; i >= 0; --i) {
		if (binary[i] == '1') {
			decimal += base;
		}
		base *= 2;
	}
	return decimal;
}

// 十进制转二进制
// 通过不断除以2并取余数,得到二进制的每一位,直到十进制数为0
std::string decimalToBinary(int decimal) {
    if (decimal == 0) return "0";
	std::string binary;
	while (decimal > 0) {
		binary = (decimal % 2 == 0 ? '0' : '1') + binary;
		decimal /= 2;
	}
	return binary;
}

// 十进制转十六进制与十六进制转十进制
// 使用C++标准库中的stringstream和hex操作符可以方便地实现十进制和十六进制之间的转换。
std::string decimalToHexadecimal(int decimal) {
	std::stringstream ss;
	ss << std::hex << std::uppercase << decimal;
	return ss.str();
}

int hexadecimalToDecimal(const std::string& hexadecimal) {
	std::stringstream ss(hexadecimal);
	int decimal;
	ss >> std::hex >> decimal;
	return decimal;
}

// 主函数与用户交互
// 主函数main()负责处理用户输入和输出,以及调用上述转换函数。
// 用户首先选择一个转换选项,然后输入相应的数字。程序将根据用户的选择进行相应的数制转换,并输出结果。

int main() {
	int choice;
	std::string input;
	std::cout << "请输入您的选择:\n";
	std::cout << "1. 二进制转十进制\n";
	std::cout << "2. 二进制转十六进制\n";
	std::cout << "3. 十进制转二进制\n";
	std::cout << "4. 十进制转十六进制\n";
	std::cout << "5. 十六进制转二进制\n";
	std::cout << "6. 十六进制转十进制\n";
	std::cin >> choice;

	std::cout << "请输入数字: ";
	std::cin >> input;

	std::transform(input.begin(), input.end(), input.begin(), ::tolower); // 转换为小写以进行十六进制转换  

	switch (choice) {
	case 1: // 二进制转十进制  
		std::cout << "十进制: " << binaryToDecimal(input) << std::endl;
		break;
	case 2: // 二进制转十六进制  
		std::cout << "十六进制: " << decimalToHexadecimal(binaryToDecimal(input)) << std::endl;
		break;
	case 3: // 十进制转二进制  
		std::cout << "二进制: " << decimalToBinary(std::stoi(input)) << std::endl;
		break;
	case 4: // 十进制转十六进制  
		std::cout << "十六进制: " << decimalToHexadecimal(std::stoi(input)) << std::endl;
		break;
	case 5: // 十六进制转二进制  
		std::cout << "二进制: " << decimalToBinary(hexadecimalToDecimal(input)) << std::endl;
		break;
	case 6: // 十六进制转十进制  
		std::cout << "十进制: " << hexadecimalToDecimal(input) << std::endl;
		break;
	default:
		std::cout << "选择无效!" << std::endl;
	}
	return 0;
}

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值