算法笔记(六)进制转换
两种情况:
(1)将P进制 x 转换为Q进制 数据
要分两步走:
1>将P进制数在转化为10进制数y:
十进制数形式为: y = d1d2d3d4d5d6d7............dn
同可以写为: y = d1*10^(n-1) + d2*10^(n-2)+............+dn-1*10 + dn;
P进制数x为a1a2a3a4a5a6.........an,类似于十进制转化,
同可以写为: y = a1*p^(n-1) + a2*p^(n-2) + .................an-1*p + an;
代码表示:
int y=0, product = 1;
while(x!=0)
{
y = y+(x%10)*product;
x = x /10;
product = product * p;
}
2>十进制数y 转化为Q进制数x
这个转化相对简单点,利用“除基取余法”,基即为Q,对y不断的取余
如: 十进制11 转化为2进制
第一次: 11%2, 余数为1,得5
第二次: 5%2, 余数为1,得2
第三次: 2%2, 余数为0,得1
第四次: 1%2, 余数为1,得0
代码表示:
int z[40], num=0;
do{
z[num++] += y%Q; //取余
y = y/Q; //取整
}while(y != 0); //y不为0时,一直循环
题述:
输入两个非负十进制A+B(<=2^30-1),转化为D进制数;
输入格式:在一行输入A,B,D
答案:
#include <cstdio>
int main()
{
int a, b, d;
scanf("%d%d%d", &a,&b,&d);
int sum = a+b;
int ans[31], num=0;
do{
ans[num++]=sum%d;
sum/=d;
}while(sum!=0);
for(int i=num-1;i>=0; i-- )
{
printf("%d",ans[i]);
}
return 0;
}
我的答案:
#include <cstdio>
int main()
{
int A,B,D,Y=0,Z[40],num=0;
scanf("%d %d %d", &A,&B,&D);
Y = A+B;
do{
Z[num++] = Y%D; //取余
Y = Y/D;
printf("进制取整\n");
printf("%d\n", Y);
}while(Y != 0);
printf("总共位数为:%d\n",num);
for(int i=0; i<num; i++){
printf("%d",Z[i]);
}
printf("\n打印结束!\n");
return 0;
}