关于c++的一个问题

在一次NOIP初赛模拟考试中,小明碰到了一道进制转换的题,由于没有学过进制转换,导致成绩不太理想,于是他下决心搞明白进制转换是怎么回事。

通过查阅资料他发现,进制有很多种,常用的有二进制、八进制、十进制和十六进制等,如果不超过十进制,0到9的十个数字就够用了,但超过十进制时,两位数字需要用一个字符去表示,通常用大写字母A表示十进制中的10,用大写字母B表示十进制中的11,用大写字母C表示十进制中的12,以此类推,用大写字母F表示十进制中的15,用大写字母G表示十进制中的16等等。

现在他想编写一个程序,将一个任意的n进制数转换成m进制的数。
输入格式

第一行仅有一个正整数n(1≤n≤16),表示给定数是一个n进制数。

第二行是一个字符串,描述了一个合法的n进制数。

第三行仅有一个正整数m(1≤m≤16),表示要将给定的n进制数转换成m进制数。

注意:所给的n进制数在其对应的10进制数中大小不会超过10^9。
输出格式

输出文件仅有一行,输出转换成m进制的数。
样例输入

2
101101
10

样例输出

45

样例输入

7
654321
8

样例输出

337315



#include<iostream>
#include<cstring>
using namespace std;
void decToOther(int tmp, int b);
void otherToDec(int a, char str[], int b);
const int MAXSIZE = 10000;
int a, b;
char str[MAXSIZE];
int main()
{
    cin >> a >> str >> b  //a、s、b分别为目前的进制、待转换的内容、目标进制
    otherToDec(a, str, b);            //统一先转换为10进制
    return 0;
}

void otherToDec(int a, char str[], int b)
{//任意进制转换为十进制 
    int tmp = 0;            //tmp保存十进制的值 
    int c = 1;          //初始化权值为1
    for (int i = strlen(str) - 1; i >= 0; i--)
    {
        int x;          //存放当前位的数字 
        if (str[i] >= 'A' && str[i] <= 'Z')         //字母A~Z表示整数10~35
            x = str[i] - 'A' + 10;
        else if (str[i] >= 'a' && str[i] <= 'z')            //字母a~z表示整数36~61
            x = str[i] - 'a' + 36;
        else
            x = str[i] - '0';
        tmp = tmp + x * c;          //累加将各个位上的值
        c = c * a;         //更新权值
    }
    decToOther(tmp, b);         //由十进制转换为目标进制
}

void decToOther(int tmp, int b)
{//十进制转换为任意进制 
    int i = 0;
    int s[MAXSIZE] = { 0 };
    while (tmp != 0)            //十进制转换为目标进制算法,结果放到数组s中
    {
        s[i] = tmp % b;
        tmp= tmp / b;
        i++;
    }
    for (; i > 0; i--)          //利用ascll编码实现字母表示两位整数,并倒序输出转换结果
    {
        if (s[i - 1] > 9 && s[i - 1] <= 35)
            cout << (char)(s[i - 1] + 55);          //当s[i-1]为整数10时(char)(10+55)='A',输出'A'
        else if (s[i - 1] > 35 && s[i - 1] <= 61)
            cout << (char)(s[i - 1] + 61);          //当s[i-1]为整数36时(char)(36+61)='a',输出'a'
        else
            cout << s[i - 1];           //个位数输出本身
    }
    cout << '\n';
}