十进制数转换为M进制数【进制转换】

问题描述

将一个十进制数X(1<=X<=10^9)转换成任意进制数M(2<=M<=16)。

输入

一行两个正整数X和M。

输出

输出X的M进制的表示。

输入样例

31 16

输出样例

1F

思路:

十进制与二进制的相互转换:十进制与二进制相互转换详解

类似于十进制数转换为二进制数的方法,十进制数转换为R进制数的基本方法是:对于整数采用“除R取余”,对于小数采用“乘R取整”。具体做法为:对于十进制数整数,用R连续除要转换的十进制整数及各次所得之商,直除到商等于0时为止,则各次所得之余数即为所求R进制整数由低位到高位的值;对于十进制小数,用R连续乘要转换的十进制小数及各次所得之积的小数部分,直乘到积的小数部分为0(或满足所要求的精度)时为止,则各次所得之积的整数部分即为所求R进制小数由高位到低位的值。当十进制数包含有整数和小数两部分时,可分别将整数和小数转换,然后相加。

 直接采用“除M取余”的方法将十进制整数X转换为M进制数。 

注: 

小tip:因为十六进制中有2-16进制都需要用到数,故先采取一个字符型数组a在0-15的位置中存储0123456789ABCDEF十六进制的所有数。在转化成M进制时,X%M为此字符型数组对应的序号。如:15转化成11进制:

a[15%11]=a[4]=4 ;                15/11=1;              a[1%11]=a[1]=1;

答案为14

#include <iostream>
#include <string>
using namespace std;
//思路:直接采用“除M取余”的方法将十进制整数X转换为M进制数。 
//考虑到11-16进制特殊
//故先把2~16进制能用到的数先存储到一个字符型数组中
char table[20]="0123456789ABCDEF";//(无论如何数组都要开大些)
int main(int argc, char** argv) {
	int x,m;
	cin>>x>>m;
//x为10进制数,m为要转为的进制数
//因为10进制之后有英文字母,故建立字符型数组存储结果 
char  a[35]; //最高位为32位
int  len=0;//记录数组长度 
	while(x)
	{
		a[len++]=table[x%m];//在不同进制中对应的余数为字符型数组的序号
		x/=m; 
	}
	for(int i=len-1;i>=0;i--)//逆序输出数组即可(因为存储时,a[0]为低位) 
	cout<<a[i];
	return 0;
}

 如果喜欢的话,点个赞再走吧。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值