10 → \to → n
算法描述
使用短除法可以将十进制转换为任意进制,我们可以使用循环或者递归来模拟这一过程。
2
∣
313
‾
1
2
∣
156
‾
0
2
∣
78
‾
0
2
∣
39
‾
1
2
∣
19
‾
1
2
∣
9
‾
1
2
∣
4
‾
0
2
∣
2
‾
0
2
∣
1
‾
1
2|\underline{313}\quad1\\ \quad 2|\underline{156}\quad0\\ \qquad 2|\underline{78}\quad0\\ \qquad\quad2|\underline{39}\quad1\\ \qquad\qquad2|\underline{19}\quad1\\ \qquad\qquad\quad2|\underline{9}\quad1\\ \qquad\qquad\qquad2|\underline{4}\quad0\\ \qquad\qquad\qquad\quad2|\underline{2}\quad0\\ \qquad\qquad\qquad\qquad2|\underline{1}\quad1\\
2∣31312∣15602∣7802∣3912∣1912∣912∣402∣202∣11
递归
void transbits(int bits, int num, char* str, int& flag)
{
if (!num) return;
transbits(bits, num / bits, str, flag);
str[flag++] = char(num % bits + 48);
}
利用递归的特点可以使数字倒着存放,不能转换16进制,因为 A S C ASC ASC数字和字母不连着。
循环
void transbits(int bits, int num, string &str)
{
while(num!=0)
{
str.insert(str.begin(),char(num%bits+48));
num/=bits;
}
}
n → \to → 10
将每一位和权相乘再相加
int transtoten(int bits,string str)
{
int sum=0;
for(int i=str.size()-1;i>=0;i--)
sum+=((int)str[i] - 48)*pow(bits,(str.size()-i-1));
return sum;
}