C/C++ 进制转换算法-除K取余和按位加权求和

在这里插入图片描述

十进制转K进制 - 除K取余

十进制转N进制的转换步骤:

  1. 将给定的十进制数不断地整除N,直到商为0。
  2. 将每步计算所得到的余数(从第一步起依次记录),倒序排列。
  3. 根据余数的数位,以N为基数,组成N进制数。

将十进制数312转换为十六进制数的计算步骤:

  1. 312 ÷ 16 = 19 … 12(商19,余12)
  2. 19 ÷ 16 = 1 … 3(商1,余3)
  3. 1 ÷ 16 = 0 … 1(商0,余1)
  4. 倒序排列所得到的余数:1 3 12
  5. 根据十六进制,用数字代表余数: 12 -> C 3 -> 3 1 -> 1
  6. 所以十进制312对应的十六进制数是:138 这个方法通过模N运算,依次获取数字每一位的N进制表示,然后倒序排列,就可以实现十进制到任意N进制的转换。
#include<stdio.h>
int main()
{
	int a = 3601;
	int k = 2;
	while(a)
	{
		//倒序
		printf("%d",a%k);
		a/=k;
	}
}

K进制转十进制-按位加权和

而把n进制转十进制的方式就是按位加权,例如十进制735转为八进制
x = 7 * 82 + 3 * 81 + 5*80

#include <stdio.h>
#include <math.h>

int convertFromBaseK(int baseKNum, int K) {
  int decNum = 0;
  int power = 0;

  while(baseKNum > 0) {
    int rem = baseKNum % 10;
    baseKNum = baseKNum / 10;
    decNum = decNum + (rem * pow(K, power));
    power++; 
  }
  return decNum;
}

int main() {

  int K = 16; 
  int hexNum = 0x13A;
  int decNum = convertFromBaseK(hexNum, K);
  printf("%X in base %d is %d", hexNum, K, decNum);
  return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YUE ZHEN PENG

码字不易,如果你想请我喝杯果汁

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值