进制转换

博客原文:https://blog.csdn.net/qq_39412582/article/details/82501430 这道题是我在ACM上看到的一道算法题,代码实现及结果如下,具体想法和注释都在代码中标识出来了,有什么疑问请留言。

#include <iostream>
using namespace std;

#include <string>

// x,y进制数   x>=2,y<=36
// s x进制数,每一位的第 10~35 用A~Z表示  为了方便计算
//这里为什么要用string类型呢?   是因为如果我们想把十六进制的数字转换为其他进制,这个十六进制数里面包含的有字符,如A5,转换成十进制就是165
string transform(int x, int y, string s)
{
    string result = "";
    int sum = 0;

    //先将待转换的数转化为十进制的数
    for (size_t i = 0; i < s.length(); ++i)
    {
        //如果待转换数为负数
        if (s[i] == '-')
            continue;
        //如果第 i 位是十进制的数
        if (s[i] >= '0'&&s[i] <= '9')
        {
            sum = sum * x + s[i] - '0';
        }
        //如果第 i 位是其他进制的数
        else
        {
            sum = sum * x + s[i] - 'A' + 10;
        }
    }
    while (sum)
    {
        char tmp = sum % y;
        sum /= y;
        if (tmp <= 9)
        {
            tmp += '0';
        }
        else
        {
            tmp = tmp - 10 + 'A';
        }
        result += tmp;
    }
    if (result.length() == 0)
        result = "0";
    if (s[0] == '-')
        result = '-' + result;
    //小端存储
    cout << "x进制数s对应的y进制数:" << s << " " << x << " " << y << endl;
    cout << "结果为:" << result << endl;
    return result;
}

int main()
{
    transform(10, 16, "1234");
    return 0;
}

{:--} 这里的结果不知道你们有没有疑问?你们可以在自己的计算器上验证一下。