hdu 2100 LoveKey

题目链接: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(" ");
}
return 0;
}

原文地址:https://www.cnblogs.com/unknownname/p/8760541.html