1. 程式人生 > >hdu 2100 LoveKey

hdu 2100 LoveKey

題意 std 數組存儲 can aaaaaa 長度 十六進制 n-1 存儲

題目鏈接:http://acm.hdu.edu.cn/showproblem.php?pid=2100

題意:26進制加法

分析:因為給定的兩個字符串長度過大,不可能將其轉化為十進制相加(會溢出),所以只能采用數組存儲每一位的二十六進制數,然後對位相加,逢26向高位進一。

註意:AAAAAA A 相加輸出一個A

code:

#include<stdio.h>
#include<string.h>
#define MAXN 300
char a[MAXN],b[MAXN];
int c[MAXN],d[MAXN],sum[MAXN];
int main()
{
int i,j,len1,len2,len;
while(~scanf("%s%s",a,b))
{
memset(c,0,sizeof(c));
memset(d,0,sizeof(d));

len1=strlen(a);
for(j=0,i=len1-1;i>=0;i--)
c[j++]=a[i]-‘A‘;

len2=strlen(b);
for(j=0,i=len2-1;i>=0;i--)
d[j++]=b[i]-‘A‘;

len=(len1<len2?len2:len1);
memset(sum,0,sizeof(sum));
for(i=0;i<len;i++)
sum[i]=c[i]+d[i];

for(i=0;i<len;i++)
{
if(sum[i]>=26)
{
sum[i]-=26;
sum[i+1]+=1;
}
if(sum[len-1]>=26)
len+=1;
}
for(i=len-1;i>=0&&sum[i]==0;i--);
if(i>=0)
{
for(;i>=0;i--)
printf("%c",sum[i]+‘A‘);
}
else
printf("A");
printf("\n");
}
return 0;
}

hdu 2100 LoveKey