C语言实现进制间转换

本文介绍了如何使用C语言将P进制数转换为十进制,以及将十进制数转换为Q进制。通过分步解析和代码实现,详细讲解了进制转换的逻辑,包括除基取余法的应用。
摘要由CSDN通过智能技术生成

对于一个P进制,若想转换为Q进制,需要分为2步

  1. 将P进制数x转换为十进制 y
  2. 将十进制数y转换为Q进制 z

对于1,将P进制数x转换为十进制

一个十进制数y={\color{Orchid}d_{1}d_{2}....d_{n} }, 可以写成y={\color{Magenta}d_{1}*10^{n-1}+d_{2}*10^{n-2}+.....+d_{n-1}*10+d_{n} }

同样,如果P进制数x为{\color{Teal}a_{1}a_{2}....a_{n} },可以表示成x={\color{DarkOrange} a_{1}*P^{n-1}+a_{2}*P^{n-2}+.....+a_{n-1}*P+a_{n} },利用它结合十进制的加、乘法,用代码实现为:

#include<stdio.h>
int main()
{
   int P,x;          //将P进制转换为十进制
  while(scanf("%d %d",&P,&x)!=EOF)     //不断接受输入,并实时处理输出结果
  {
     int y=0,pro=1;
     while(x!=0)
    {
       y=y+(x%10)*pro;
       x=x/10;
       pro=pro*P;
    }
     printf("%d",y);
  }
   return 0;
}

对于2,将十进制转换为Q进制z

采用除基取余法,即每次将待转换数除以进制Q,得到的余数作为低位存储,得到的商成为待转换数.....最后商为0时,将所有位从高到低输出就得到z

如将13转换位二进制数

13/2=6......1

6/2=3........0

3/2=1........1

1/2=0........1

余数从后往前输出,为1101

#include<stdio.h>
int main()
{
    int z[50]={0},num=0;
    int Q,y;
    while(scanf("%d %d",&Q,&y)!=EOF)
   {
      do
     {
        z[num++]=y%Q;
        y=y/Q;
     }while(y!=0);
    for(int i=num-1;i>=0;i--)    //这里是num-1,num++是先执行再自增
    {
        printf("%d",z[i]);
    }
  }
    return 0;
}

因此,将一个P进制转换为Q进制代码整合为:

#include<stdio.h>
int one(int P,int x)
{
     int pro=1,y=0;
     while(x!=0)
    {
       y=y+(x%10)*pro;
       x=x/10;
       pro=pro*P;
    }
   return y;
}
void two(int y,int Q)
{
    int z[50]={0},num=0;
      do
     {
        z[num++]=y%Q;
        y=y/Q;
     }while(y!=0);
      for(int i=num-1;i>=0;i--)    //这里是num-1,num++是先执行再自增
      {
        printf("%d",z[i]);
      }
}
int main()
{
    int P,Q,x=0;
    while(scanf("%d %d %d",&P,&Q,&x)!=EOF)
    {
        int temp=0;
        temp=one(P,x);
        two(temp,Q);
    }
    return 0;
}

执行了一下,结果正确

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值