任意进制间整数转换-C++源码
转换思路
仿照初中所学的10进制与2进制之间的转换方法,从低位依次往高位求余数即可。例如10进制110转换到2进制:
除数 | 被除数 ...... 余数
2 | 110 ...... 0
2 | 55 ...... 1
2 | 27 ...... 1
2 | 13 ...... 1
2 | 6 ...... 0
2 | 3 ...... 1
2 | 1 ...... 1
2 | 0 ...... 0
观察上述求解过程发现,p进制的被除数110除以q进制的除数2,得出了p进制的商55以及q进制的余数0。对这个过程进行归纳可以编写出如下代码。
具体代码思路
1.建立数值与字母之间映射关系
-
接收的数字可能是大整数,无法用常规的int来表示,那么就需要以字符串来接收输入的值。所以第一步需要建立int与char之间的映射关系,代码如下:
// 此处假设只使用数字0-9,大写字母A-Z。如果需要使用小写字母,自己扩展一下映射数组就可 void map_chr_int(){ for (char i = '0'; i <= '9'; ++i) chr2int[i] = i - '0'; for (char i = 'A'; i <= 'Z'; ++i) chr2int[i] = (i - 'A') + 10; for (int i = 0; i < 10; ++i) int2chr[i] = i + '0'; for (int i = 10; i < 36; ++i) int2chr[i] = (i - 10) + 'A'; }
2. 编写从p进制转换为q进制的函数
-
对于已经获取的p进制数,计算转换后的q进制数
void p2q(int p, int q){ if (p == q){ cout