洛谷B2143 进制转换

题目描述

用递归算法将一个十进制整数 𝑋(1≤𝑋≤109)转换成任意进制数 𝑀(2≤𝑀≤16,𝑀为整数)。

输入格式

一行两个数,第一个十进制整数 𝑋,第二个为进制 𝑀。

输出格式

输出结果。

输入输出样例

输入 #1复制

31 16 

输出 #1复制

1F

首先,来了解一个知识点,1e9的2进制有30个(所以你数组可以开到40就行了),然后再了解一下你用递归求得的每一位上的数,在输出时必须是逆序,就比如,6(2)=110,你在用除法(我说的是数学中的除法,不是C语言中特有的除法)的时候是这样的,6/2=3余数为0,3/2=1余数为1,1/2=0余数为1,看需要倒序110,才是二进制中的数;还有一个点是,他不是要求是(2进制到16进制之间)所以必然会出现字母,这时若出现a[i]>9,就强制类型转化,整型转化为字符型(char)(a[i]+55).

真的很简单,看一遍不会就看两遍,继续看,并不难,可能初学者没学过递归就不知道怎么写,没事慢慢来,都是这么过来的

#include<iostream>
using namespace std;
void f(int x,int y)
{
	int a[40],k=0;
	while(x)
	{
		a[k++]=x%y;
		x/=y;
	}
	for(int i=k-1;i>=0;i--)
	{
		if(a[i]>9) cout<<(char)(a[i]+55);
		else cout<<a[i];
	}
}
int main()
{
	int n,m;
	cin>>n>>m;
	f(n,m);
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值