进制转换 用递归写刚需求解

进制转换
【问题描述】
编写一个程序,可以实现将任意十进制整数n转换为m进制数,其中
10-15用大写字母A-F表示 。
输入:包含两个正整数n(1<n<1000)和m(1<m<=16);
输出:转换后的m进制数。
【输出样例】
6F

  1. 方法1,只输出,不保存
#include <iostream>
using namespace std;

void trans(int n, int m)
{
    if (n < m) {
        if (n < 10)    cout << n;
        else cout << char('A' + n - 9);
        return;
    }
    int t1 = n / m;
    if (t1 < 10)    cout << t1;
    else cout << char('A' + t1 - 9);
    n %= m;
    trans(n, m);
}

int main() {
    /*将任意十进制整数n转换为m进制数,其中
    10-15用大写字母A-F表示 。
    输入:包含两个正整数n(1<n<1000)和m(1<m<=16);
    输出:转换后的m进制数。*/
    int n = 31;
    int m = 16;
    cin >> n >> m;
    if (n < 1 || n > 999)
        cout << "n的范围错误..." << endl;
    if (m < 2 || m > 16)
        cout << "m的范围错误..." << endl;
    trans(n, m);
    return 0;
}
  1. 方法2,保存结果(使用string保存结果):
#include <iostream>
#include <string>
using namespace std;

string trans(int n, int m)
{
    string str = "";
    if (n < m) {
        if (n < 10)    str = { char('0' + n), 0 };
        else str = { char('A' + n - 9), 0 };
        return str;
    }
    int t1 = n / m;
    n %= m;
    if (t1 < 10) str = { char('0' + t1), 0 };
    else str = { char('A' + t1 - 9), 0 };    
    return (str + trans(n, m));
}

int main() {
    /*将任意十进制整数n转换为m进制数,其中
    10-15用大写字母A-F表示 。
    输入:包含两个正整数n(1<n<1000)和m(1<m<=16);
    输出:转换后的m进制数。*/
    int n;
    int m;

    //cin >> n >> m;
    if (n < 1 || n > 999)
        cout << "n的范围错误..." << endl;
    if (m < 2 || m > 16)
        cout << "m的范围错误..." << endl;
    cout << trans(n, m) << endl;
    return 0;
}