[Solution]《进制转换》解题报告

题目很简单:把一个十进制数转换成十六进制。

亮点:使用常量字符数组来存储0 – 15的对应值0 – F

不多说,直接上代码。


#include <iostream>
#include <string>
using namespace std;

// 定义进制数
const int radix = 16;

// 定义 0-F 对应 0 - 15
const char digit[radix] = "0123456789ABCDEF";

// 定义无符号64位长整型变量 n
unsigned long long n;

// 定义字符串变量 ans,用于存储结果
string ans;

// 主过程
void f(unsigned long long x){
    
    // 将字符串 ans 后连接 x mod radix 的对应 0-F 字符
    ans += digit[x % radix];
    
    // 将 x 赋值为 x / radix (进制数(16))
    x /= radix;
    
    // 如果 x 已被除尽,则退出过程
    if (x == 0) 
        return;
    else
        // 递归调用本过程
        f(x);
}


int main(){
    // 读入n
    cin >> n;
    
    // 执行过程
    f(n);
    
    // 倒序输出字符串
    for (int i = ans.length() - 1; i >= 0; i-- )
        cout << ans[i];
    
    return 0;
}

Leave a Reply

Your email address will not be published. Required fields are marked *