1. 程式人生 > >(string 高精度) Lovekey hdu 2100

(string 高精度) Lovekey hdu 2100

one LG return 註意 reverse others 找到 pac 密碼

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

思路:

此處可以看成

26進制加法運算,不必進行換制運算,否則會很麻煩且容易超時。

同時,還應註意多余的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