hdu2100
3581 ワード
Problem Description
MXYZ-26進数は、それぞれ大文字の数字です.A、B、C、…、X、Y、Zはそれぞれ0~25の数字を順番に表し、nビットの26進数を10進数に変換するルールは以下の通りである.
A 0 A 1 A 2 A 3…An-1の各ビットが表す数字がa 0 a 1 a 2 a 3…an-1であれば、このXYZ-26進数の10進数は
m = a0 * 26^(n-1) + a1 * 26^(n-2) + … + an-3* 26^2 + an-2*26 + an-1
ある日viviは突然ロマンチックに游び始めて、学校の1つの教室に隠れて、枫氷の叶を探しに行かせて、もちろん、彼女も枫氷の叶が方向音痴ではないことを知っていて、そこでXYZのエビと水域の浪子を见つけて手伝って、彼らはvivi蔵の教室の入り口で、それぞれ1つのXYZ-26進数を书いて、それぞれaとbで、しかもドアの键の上でパスワードを设置しました.明らかに、パスワードを見つけてこそ鍵を開け、教室に入ることができる.このパスワードのセットはXYZのメンバーによってlovekeyと呼ばれています.幸いなことに、楓氷葉はlovekeyがaの10進数値とbの10進数値の和のXYZ-26進数形式であることを知っている.もちろんエビや水域の浪子もカエデの氷の葉を難しくしたくないので、aとbの桁数は200位を超えません.
例えば、第1のテストデータのセット
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
問題には複数のテストデータがあります.
各テストデータのセットには、2つの値がXYZ-26進数であり、各数字の各桁には大文字のみが含まれ、各数字は200桁を超えない.
Output
出力XYZのlovekeyを出力し、各グループの出力が1行を占める.
Sample Input
Sample Output
しようがないことを表して、少し面倒で、指导してもらって、喷かないでください!
MXYZ-26進数は、それぞれ大文字の数字です.A、B、C、…、X、Y、Zはそれぞれ0~25の数字を順番に表し、nビットの26進数を10進数に変換するルールは以下の通りである.
A 0 A 1 A 2 A 3…An-1の各ビットが表す数字がa 0 a 1 a 2 a 3…an-1であれば、このXYZ-26進数の10進数は
m = a0 * 26^(n-1) + a1 * 26^(n-2) + … + an-3* 26^2 + an-2*26 + an-1
ある日viviは突然ロマンチックに游び始めて、学校の1つの教室に隠れて、枫氷の叶を探しに行かせて、もちろん、彼女も枫氷の叶が方向音痴ではないことを知っていて、そこでXYZのエビと水域の浪子を见つけて手伝って、彼らはvivi蔵の教室の入り口で、それぞれ1つのXYZ-26進数を书いて、それぞれaとbで、しかもドアの键の上でパスワードを设置しました.明らかに、パスワードを見つけてこそ鍵を開け、教室に入ることができる.このパスワードのセットはXYZのメンバーによってlovekeyと呼ばれています.幸いなことに、楓氷葉はlovekeyがaの10進数値とbの10進数値の和のXYZ-26進数形式であることを知っている.もちろんエビや水域の浪子もカエデの氷の葉を難しくしたくないので、aとbの桁数は200位を超えません.
例えば、第1のテストデータのセット
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
問題には複数のテストデータがあります.
各テストデータのセットには、2つの値がXYZ-26進数であり、各数字の各桁には大文字のみが含まれ、各数字は200桁を超えない.
Output
出力XYZのlovekeyを出力し、各グループの出力が1行を占める.
Sample Input
AAAADH BCE
DRW UHD
D AAAAA
Sample Output
BFL
XYZ
D
しようがないことを表して、少し面倒で、指导してもらって、喷かないでください!
#include<stdio.h>
#include<string.h>
void daozhi(char *a) // , 。
{
int i,l=strlen(a);
char s;
for(i=0;i<l/2;i++)
{
s=a[i];a[i]=a[l-1-i];a[l-1-i]=s;
}
}
void jia(char *a,char *b) //
{
int len1=strlen(a),len2=strlen(b);
for(int i=0;i<len1;i++)
{
if(i<len2)
a[i]+=b[i]-65;
if(a[i]>'Z') //
{
if(a[i+1]!='\0')
a[i+1]++;
else
a[i+1]='B';
a[i]=(a[i]-65)%26+65;
}
}
if(a[len1]=='B')a[len1+1]='\0';
else a[len1]='\0';
}
void qu(char *a) // A
{
int i,l,k=1;
l=strlen(a);
for(i=0;i<l;i++)
{
if(a[i]=='A'&&a[i+1]=='A') k++;
}
for(i=0;i<l-k;i++)
{
a[i]=a[k+i];
if(i==l-k-1)
a[i+1]='\0';
}
if(k==l) // A
{
a[0]='A';
a[1]='\0';
}
}
int main()
{
char a[222],b[222],s;
int i,j,q,len1,len2,t;
while(~scanf("%s%s",a,b))
{
if(a[0]=='A')
qu(a);
if(b[0]=='A')
qu(b);
len1=strlen(a);
len2=strlen(b);
daozhi(a);
daozhi(b);
if(len1>=len2)
{
jia(a,b);
daozhi(a);
if(a[0]=='A')
printf("%s
",a);
else
printf("%s
",a);
}
else
{
jia(b,a);
daozhi(b);
if(b[0]=='A')
printf("%s
",a);
else
printf("%s
",b);
}
}
return 0;
}