概念
一个N进制数字中的每一个数位只能表示0~N-1,当达到N-1后再加1时就要往上一个数位上进1,同时将该数位清零
常见类型
二/八/十/十六 进制
超过9时的数值表示:依次用A、B、C、····等字母表示10、11、12、···
转换
非十进制转换成十进制 - 幂次方方法
例子:二进制101 = 十进制1*1+0*2+1*(2*2)=5
十进制转换成非十进制 - 除K取余倒排法
例子:十进制11转换成二进制数
11 / 2 = 5 ··· 1
5 / 2 = 2 ··· 1
2 / 2 = 1 ··· 0
1 / 2 = 0 ··· 1
所以十进制11 = 二进制1011
程序实现
非十进制转换成十进制 - 幂次方方法
/* * 将X进制数转换成十进制 */ #include <bits/stdc++.h> using namespace std; int ZhuanHuanChengShiJinZhi(char ZiFu) { if(ZiFu>='0' && ZiFu<='9') return int(ZiFu - '0'); return 10 + int(ZiFu - 'A'); } int main() { int X; string N; cin >> N >> X; long long ciFang = 1, shiJinZhi = 0; int NDeChangDu = N.size(); for(int i=NDeChangDu-1; i>-1; i--) { int ShuZi = ZhuanHuanChengShiJinZhi(N[i]); shiJinZhi += ShuZi*ciFang; ciFang *= X; } cout << shiJinZhi; retur
十进制转换成非十进制 - 除K取余倒排法
#include <bits/stdc++.h> using namespace std; char ZhuanHuanChengZiFu(int ShuZi) { if(ShuZi<10) return '0'+ShuZi; return 'A'+(ShuZi-10); } int main() { long long N; int X; cin >> N >> X; if(N==0) { cout << N; return 0; } string xJinZhiShu = ""; int yuShu; while(N>0) { yuShu = N%X; N /= X; xJinZhiShu += ZhuanHuanChengZiFu(yuShu); } int ChangDu = xJinZhiShu.size(); for(int i=ChangDu-1; i>-1; i--) cout << xJinZhiShu[i]; return 0
}