(string 高精度) Lovekey hdu 2100
Lovekey
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 9070 Accepted Submission(s): 2976
Problem Description
XYZ-26進制數是一個每位都是大寫字母的數字。 A、B、C、…、X、Y、Z 分別依次代表一個0 ~ 25 的數字,一個 n 位的26進制數轉化成是10進制的規則如下
A0A1A2A3…An-1 的每一位代表的數字為a0a1a2a3…an-1 ,則該XYZ-26進制數的10進制值就為
m = a0 * 26^(n-1) + a1 * 26^(n-2) + … + an-3* 26^2 + an-2*26 + an-1
一天vivi忽然玩起了浪漫,要躲在學校的一個教室,讓楓冰葉子去找,當然,她也知道楓冰葉子可不是路癡,於是找到了XYZ的小蝦和水域浪子幫忙,他們會在vivi藏的教室的門口,分別寫上一個XYZ-26進制數,分別為 a 和 b,並且在門鎖上設置了密碼。顯然,只有找到密碼才能打開鎖,順利進入教室。這組密碼被XYZ的成員稱為lovekey。慶幸的是,楓冰葉子知道lovekey是 a的10進制值與b的10進制值的和的XYZ-26進制形式。當然小蝦和水域浪子也不想難為楓冰葉子,所以a 和 b 的位數都不會超過200位。
例如第一組測試數據
a = 0 * 26^5+0* 26^4+ 0* 26^3+ 0 *26^2 + 3*26 + 7 = 85
b = 1*26^2 + 2*26 + 4 = 732
則 a + b = 817 = BFL
Input
題目有多組測試數據。
每組測試數據包含兩個值均為的XYZ-26進制數,每個數字的每位只包含大寫字母,並且每個數字不超過200位。
Output
輸出XYZ的lovekey,每組輸出占一行。
Sample Input
AAAADH BCE DRW UHD D AAAAA
Sample Output
BFL XYZ D
思路:
此處可以看成
同時,還應註意多余的A,並且,AAAAAAAAAA * 的結果還是任意一個字母* ,這個是必須考慮的。
#include <iostream> #include <string> #include <algorithm> using namespace std; string add(string a,string b) { int len1=a.length(); int len2=b.length(); int i; if(len1>len2) { for(i=1;i<=len1-len2;i++) b="A"+b; } else { for(i=1;i<=len2-len1;i++) a="A"+a; } int cf=0,t; string str; len1=a.length(); for(i=len1-1;i>=0;i--) { t=a[i]-‘A‘+b[i]-‘A‘+cf; cf=t/26; t%=26; str=char(t+‘A‘)+str; } if(cf!=0) str=char(cf+‘A‘)+str; reverse(str.begin(),str.end()); int len=str.length(); for(i=len-1;i>0;i--) { if(str[i]==‘A‘) { len--; } else break; } string str1; for(i=len-1;i>=0;i--) str1=str1+str[i]; return str1; } int main() { string a,b; while(cin>>a>>b) { string str; str=add(a,b); cout<<str<<endl; } return 0; }View Code
(string 高精度) Lovekey hdu 2100