进制转换思路及代码
一、将P进制x转换为十进制y
【原理】:十进制y可以表示为
y
=
d
1
∗
1
0
n
−
1
+
d
2
∗
1
0
n
−
2
+
d
3
∗
1
0
n
−
3
+
.
.
.
+
d
n
−
1
∗
10
+
d
n
y=d_1*10^{n-1}+d_2*10^{n-2}+d_3*10^{n-3}+...+d_{n-1}*10+d_n
y=d1∗10n−1+d2∗10n−2+d3∗10n−3+...+dn−1∗10+dn。同样,P进制x也可以表示为
x
=
a
1
∗
P
n
−
1
+
a
2
∗
P
n
−
2
+
a
3
∗
P
n
−
3
+
.
.
.
+
a
n
−
1
∗
P
+
a
n
x=a_1*P^{n-1}+a_2*P^{n-2}+a_3*P^{n-3}+...+a_{n-1}*P+a_n
x=a1∗Pn−1+a2∗Pn−2+a3∗Pn−3+...+an−1∗P+an。那么就可以通过十进制的加法和乘法转换为十进制y。
【实际操作】:首先从低位至高位依次取出x的各个位数。然后将各个位的系数乘上对应进制的倍数。然后把所有位的乘积结果求和即为十进制数。
**【注意】**这里取x的各个位数要用x%10
。因为x在输入之后,可以理解为它被识别成了十进制。如110表示的是一百一十。
#include<cstdio>
int main(){
int x;
scanf("%d",&x);
int P=2;
int y=0,product=1;
while(x!=0){
y=y+(x%10)*product;
x = x/10;
product = product*P;
}
printf("%d",y);
return 0;
}
二、将十进制y转换为Q进制z
**【原理】**采用除基取余法。然后从高位至低位输出。
**【实际操作】**建立一个z[40]用于存储各个位数。然后使用y%Q
以此得到各个位数。
**【注意】**最后要倒叙输出。
#include<cstdio>
int main(){
int y;
scanf("%d",&y);
int Q=2;
int z[40],num=0;
do{
z[num++]=y%Q;
y=y/Q;
}while(y!=0);
for(int i=num-1;i>=0;i--){
printf("%d",z[i]);
}
return 0;
}