求过

· · 题解

简单的一道模拟题。

思路

先将 n 拆成二进制下 7 位一截的形式,再在第一位判断是否是最高位。最后转十六进制直接输出。

具体见代码。

代码

#include<bits/stdc++.h>
using namespace std;
long long n;
string a="0123456789ABCDEF";//十六进制的数字
void print(int i){//输出
    cout<<a[i/16]<<a[i%16]<<" ";
}
int main(){
    cin>>n;
    if(n==0){cout<<"00";return 0;}//0需要特判
    while(n>0){
        int k=n%128;//2^7=128,7位一截
        n/=128;
        if(n>0)print(k+128);//判断是否为最高位
        else print(k);
    }
    return 0;
}

本题数据较水,不特判 0 也能过。建议添加 n=0 的数据。