字节青训营-后端练习题-编程题1(36进制加法)

· · 个人记录

题目

实现一个 36 进制的加法 0-9 a-z。

示例

输入:["abbbb","1"],输出:"abbbc"

限定语言:C、C++、Java、Python、JavaScript V8、Go

思路:

先将36进制转为10进制,再完成10进制加法,最后将结果转化为36进制

#include <iostream>
#include <string>
#include <cmath>
#include <algorithm>

using namespace std;

// 将36进制字符转化对应10进制数字,如a->10 
int zh1(char x)
{
    if (x <= '9')
        return x - '0';
    else
        return x - 'a' + 10;
}

// 将10进制数字转化对应36进制字符,如10->a
char zh2(int x)
{
    if (x <= 9)
        return (char)(x + '0');
    else
        return (char)(x - 10 + 'a');
}

// 36进制转十进制 
int ts36to10(string x)
{
    int num = 0; 
    reverse(x.begin(), x.end());  // 反转字符串 
    for (int i = 0; i < x.size(); i++)
    {
        num += zh1(x[i]) * pow(36, i);
    }
    return num;
}

// 十进制转36进制 
string ts10to36(int x)
{
    string a;

    while (x != 0)
    {
        a += zh2(x % 36);
        x /= 36;
    }
    reverse(a.begin(), a.end());
    return a;
}

// 36进制加法
string add36(string a, string b)
{
    int num = ts36to10(a) + ts36to10(b);
    return ts10to36(num);
}

int main()
{
    string a, b;
    cin >> a >> b;

    cout << add36(a, b) << endl;

    return 0;
}