更好的阅读体验,请点击 进制转换 | YinKai's Blog
程序介绍:n 进制数转换器
这个简单的C++程序是一个 n 进制数转换器,可以将一个给定的 n 进制数按照用户指定的进制进行转换。用户需要提供三个输入:原始进制,待转换的数,目标进制。程序将按照指定进制进行转换,并输出结果。
程序设计:
1. 字符与数字的转换:
程序定义了两个函数 fun1
和 fun2
,用于字符与数字的相互转换。fun1
将字符转换为对应的数字,而 fun2
则将数字转换为相应的字符。这两个函数使用简单的映射关系,将字符 'A' 到 'F' 映射为数字 10 到 15。
2. 主函数:
-
输入: 用户需要输入三个值,分别是原始进制
n
、待转换的数s
和目标进制m
。 -
转换过程: 程序通过循环遍历待转换的数
s
的每一位,将每一位字符转换为对应的数字,并根据当前位次计算出该位的值。然后,通过不断除以目标进制m
,将得到的余数转换为字符,并更新数字,直到原始数完全转换。 -
输出: 最终,程序将得到的结果字符串输出。
示例:
如果输入为 10 ABCDEF 16
,表示将十进制数 ABCDEF
转换为十六进制数,程序将输出结果 ABCDEF
。
如何使用:
用户可以根据需要修改输入值,实现不同进制之间的转换。该程序简洁明了,逻辑清晰,是一个学习进制转换的良好起点。
源程序:
#include <iostream>
using namespace std;
int fun1(char a) //字符转数字
{if (a == 'A') return 10;if (a == 'B') return 11;if (a == 'C') return 12;if (a == 'D') return 13;if (a == 'E') return 14;if(a=='F') return 15;return int(a - '0');
}
char fun2(int a)
{if (a == 10) return 'A';if (a == 11) return 'B';if (a == 12) return 'C';if (a == 13) return 'D';if (a == 14) return 'E';if (a == 15) return 'F';return char (a + '0');
}
int main()
{long long n, m, p = 1, sum = 0; //p为当前位次(百位,千位,万位等。)string s, res = "";
cin >> n >> s >> m; //前进制,数,后进制
//从低位到高位,将字符转换为数字for (int i = s.size() - 1; i >= 0; i --){sum += fun1(s[i]) * p ; //当前位等于转为为数字之后,乘上当前位次p *= n; //更新位次}//因为可能存在16进制,将当前数转换为字符串输出while (sum != 0){res = fun2(sum % m) + res; //由低位向高位逐级求出,然后放入答案sum /= m; //更新数字}
cout << res << endl;
return 0;
}