算法-【进制转换】的概念、常见类型、实现

概念

一个N进制数字中的每一个数位只能表示0~N-1,当达到N-1后再加1时就要往上一个数位上进1,同时将该数位清零

常见类型

二/八/十/十六 进制

超过9时的数值表示:依次用A、B、C、····等字母表示10、11、12、···

转换

非十进制转换成十进制 - 幂次方方法

例子:二进制101 = 十进制1*1+0*2+1*(2*2)=5

十进制转换成非十进制 - 除K取余倒排法

例子:十进制11转换成二进制数

11 / 2 = 5 ··· 1

5 / 2 = 2 ··· 1

2 / 2 = 1 ··· 0

1 / 2 = 0 ··· 1

所以十进制11 = 二进制1011

程序实现

非十进制转换成十进制 - 幂次方方法

/*
 * 将X进制数转换成十进制
 */


#include <bits/stdc++.h>
using namespace std;


int ZhuanHuanChengShiJinZhi(char ZiFu) {
  if(ZiFu>='0' && ZiFu<='9')  return int(ZiFu - '0');
  return 10 + int(ZiFu - 'A');
}


int main() {
  int X;
  string N;
  cin >> N >> X;


  long long ciFang = 1, shiJinZhi = 0;


  int NDeChangDu = N.size();
  for(int i=NDeChangDu-1; i>-1; i--) {
    int ShuZi = ZhuanHuanChengShiJinZhi(N[i]);
    shiJinZhi += ShuZi*ciFang;
    ciFang *= X;
  }


  cout << shiJinZhi;


  retur

十进制转换成非十进制 - 除K取余倒排法

#include <bits/stdc++.h>
using namespace std;


char ZhuanHuanChengZiFu(int ShuZi) {
  if(ShuZi<10)  return '0'+ShuZi;
  return 'A'+(ShuZi-10);
}


int main() {
  long long N;
  int X;


  cin >> N >> X;


  if(N==0) {
    cout << N;
    return 0;
  }


  string xJinZhiShu = "";
  int yuShu;
  while(N>0) {
    yuShu = N%X;
    N /= X;
    xJinZhiShu += ZhuanHuanChengZiFu(yuShu);
  }


  int ChangDu = xJinZhiShu.size();
  for(int i=ChangDu-1; i>-1; i--) 
    cout << xJinZhiShu[i];
    return 0

}

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值