字节青训营-后端练习题-编程题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;
}