题目思路

就是进制转换啦。

进制转换,肯定要讲一下短除法。就是每次看余数并做除法。

比如 $10$ 转换 $2$ 进制。

$13\bmod2=1$。

$6 \bmod 2=0$。

$3 \bmod2=1$。

$1\bmod2=1$。

最后倒序枚举余数即可。

那么,我们可以有两种方案,递归存数组

存数组,字面意思,把余数存下来,最后翻转,输出。

递归,每次准备着输出数,但先递归后面的余数,最后返回来输出。

题目代码

我用的是递归。

#include<bits/stdc++.h>
typedef long long ll;
using namespace std;
string c="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";//存数
void f(ll x,ll m){if(x/m)f(x/m,m);cout<<c[x%m];}//递归
int main()
{
    ll n,x;
    cin>>n>>x;
    if(x==0){puts("0");return;}
    f(n,x);
    return 0;
}

想了解其他做法,可以参考B2143。

最后修改:2023 年 04 月 20 日
v我50吃疯狂星期四