字节青训营-后端练习题-编程题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;
}
posted @ 2023-05-17 17:55  修凡  阅读(31)  评论(0编辑  收藏  举报