天天看點

C++ 實作二十六進制加法

題目:

實作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