关于二进制转换的方法
利用位运算
int n;
cin >> n;
string s;
/* 每个字节8位 */
for (int k = sizeof(n) * 8 - 1; k >= 0; k--)
s += (n >> k & 1) + '0';
/* 去前导0 */
while (s.front() == '0' && s.size() > 1)
s.erase(0, 1);
cout << s << endl;
利用 bitset 类
10进制转其他进制——短除法
代码实现:
char get(int n)
{
if(n < 10) return n + '0';
return n - 10 + 'A';
}
/* n:10进制的数字,b:b进制 */
string base(int n,int b)
{
string num;
while(n) num += get(n % b),n /= b;
reverse(num.begin(),num.end());
return num;
}
其他进制转10进制——秦九韶算法
分析:进行如下改写:
由内向外逐步计算,即:
把b进制数的每一位当作系数,乘以 b 后,加上系数。
代码实现:
int uget(char c)
{
if(c <= '9') return c - '0';
return c - 'A' + 10;
}
/* num:b进制的数字,b:b进制 */
int base10(string num, int b)
{
int sum = 0;
for(auto c: num)
sum = sum * b + uget(c);
return sum;
}