这是一道十进制转 x x x 进制问题。
对于 k k k 进制,从低位到高位,分别代表 k 0 , k 1 , k 2 , … k^0,k^1,k^2,\dots k0,k1,k2,…。
由此,我们可以推算出十进制转 x x x 进制的方法。
举个例子,我们将 100 0 10 1000_{10} 100010 转成 2 2 2 进制。
首先 1000 ÷ 2 = 500 … … 0 1000 \div 2=500 \dots \dots 0 1000÷2=500……0,那么 2 0 2^0 20 位就是 0 0 0。
商是 500 500 500,那么接着 500 ÷ 2 = 250 … … 0 500 \div 2=250 \dots \dots 0 500÷2=250……0,则 2 1 2^1 21 位为 0 0 0。
商是 250 250 250,继续 250 ÷ 2 = 125 … … 0 250 \div 2=125 \dots \dots 0 250÷2=125……0,则 2 2 2^2 22 位为 0 0 0。
商是 125 125 125,继续 125 ÷ 2 = 62 … … 1 125 \div 2=62 \dots \dots 1 125÷2=62……1,则 2 3 2^3 23 位为 1 1 1。
以此类推。
最后算出 100 0 10 = 111110100 0 2 1000_{10}=1111101000_2 100010=11111010002。
那么在实现的时候我们可以递归计算。
对于字母,我们可以用字符串 R R R 去存储。 R i R_i Ri 表示比 i i i 更高的进制下的 i 10 i_{10} i10 是多少。
AC Code:
#include<bits/stdc++.h>
using namespace std;
const string R="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//存储进制所对应的符号
int x;
void tox(int n)
{
if(n/x==0)//边界
{
cout<<n;
return;
}
tox(n/x);//先递归
cout<<R[n%x];//后输出
}
int main()
{
int n;
cin>>n>>x;
tox(n);
return 0;
}