题目描述
用递归算法将一个十进制整数 𝑋(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;
}