题目:
实现26进制的加法
其中, 'a'代表0,z代表25,依次类推
输入为 'a'~'z'26个小写字母的组合,
输出也为 'a'~'z'的组合
思路:先将输入字符串转换为10进制数,进行加法之后,再转换为26进制
#include<iostream>
#include<string>
using namespace std;
/* 功能:26进制的加法
其中, 'a'代表0,z代表25,依次类推
输入为 'a'~'z'26个小写字母的组合,
输出也为 'a'~'z'的组合
思路:先将输入字符串转换为10进制数,进行加法之后,再转换为26进制
str1、str2代表输入字符串
str3为输出字符串
*/
int main() {
string str1, str2;
while (cin >> str1) { //在while循环中,实现连续输入
cin >> str2;
//将str1和str2转换为10进制数
int sum1 = 0; //存储str1转换为10进制的值
int sum2 = 0; //存储str2转换为10进制的值
if (!str1.empty()) { //将str1转换为10进制数
int num = 0;
for (int i = 0; i < str1.size(); i++) { //从最高位开始遍历
if (str1[i] >= 'a' && str1[i] <= 'z') { //判断元素是不是小写字母
num = str1[i] - 'a'; //将小写字母转换为对应10进制数
sum1 = sum1 * 26 + num; //26代表26进制数,若为其他进制,更改为其他数字
}
}
}
if (!str2.empty()) { //将str2转换为10进制数
int num = 0;
for (int i = 0; i < str2.size(); i++) {
if (str2[i] >= 'a' && str2[i] <= 'z') {
num = str2[i] - 'a';
sum2 = sum2 * 26 + num;
}
}
}
//total 是两个数的和
int total = sum1 + sum2;
//将total转换为26进制数,结果输出到Str3
string Str3 = "";
int t = 0; //t为每次取余的值
while (1) {
t = total % 26;
total /= 26;
Str3 = (char)(t + 'a') + Str3; // string 类型字符串可以直接进行加法操作,从低位到高位显示字符
if (total == 0) break; // 考虑到输入为aa+aa的情况,特别加了这一步骤
}
cout << Str3 << endl;
system("pause");
}
}
Str3 = (char)(t + 'a') + Str3;
'a'是字符常量,其存储内容是a的ASCII码,默认以字符形式显示。
t是int类型,t + 'a'在内存空间中是t的值加上a的ASCII码,强制转换为char型,因为先前a为字符,默认以字符类型显示。
部分借鉴资料:
https://blog.csdn.net/langmanqishizaijia/article/details/51087443