C++ 十进制数到任意进制数转换算法详解
C++ 十进制数到任意进制数转换算法详解
在计算机科学中,十进制数与其他进制数的转换是一个基本问题。本文将介绍一种简单而有效的算法,使用 C++ 语言实现十进制数到任意进制数 (2 <= d <= 16) 的转换。
算法原理
该算法基于以下原理:
N = (N div d) * d + (N mod d)
其中:
- N 代表要转换的十进制数。
- d 代表目标进制。
- div 表示整除运算。
- mod 表示求余运算。
代码示例
#include <iostream>
#include <string>
using namespace std;
string decimalToBase(int decimal, int base) {
string result = '';
while (decimal > 0) {
int remainder = decimal % base;
// 将余数转换为字符,如果是10-15,则使用A-F表示
char digit = (remainder < 10) ? remainder + '0' : remainder - 10 + 'A';
result = digit + result; // 将余数添加到结果字符串的最前面
decimal /= base; // 对十进制数进行整除运算
}
return result;
}
int main() {
int decimal, base;
cout << '输入十进制数和目标进制 (2 <= 进制 <= 16): ';
cin >> decimal >> base;
string result = decimalToBase(decimal, base);
cout << '转换结果: ' << result << endl;
return 0;
}
代码解释
-
函数
decimalToBase- 接收两个参数:十进制数
decimal和目标进制base。 - 使用
while循环不断进行整除和求余操作,直到十进制数为 0。 - 在每次循环中,将余数转换为字符,并将其添加到结果字符串的最前面。
- 最后返回结果字符串。
- 接收两个参数:十进制数
-
主函数
main- 接收用户输入的十进制数和目标进制。
- 调用
decimalToBase函数进行转换,并将结果输出。
样例说明
样例输入: 2018 16
样例输出: 7E2
样例解释:
将 2018 转换为 16 进制数,计算过程如下:
- 2018 = (2018 div 16) * 16 + (2018 mod 16) = 126 * 16 + 2
- 126 = (126 div 16) * 16 + (126 mod 16) = 7 * 16 + 14
- 7 = (7 div 16) * 16 + (7 mod 16) = 0 * 16 + 7
因此,2018 的 16 进制表示为 7E2。
总结
本文详细介绍了使用 C++ 语言实现十进制数到任意进制数的转换算法,并提供代码示例和详细解释。希望本文能够帮助读者更好地理解和应用该算法。
原文地址: https://www.cveoy.top/t/topic/paBS 著作权归作者所有。请勿转载和采集!