算法笔记(六)进制转换

两种情况:

(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;
}




  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值