題目:
實作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