这道题本身不难,开始我采取第一种方法,不过在输入时用gets,导致超时;然后就采用第二种方法结果当用gets输入时还是超时,不过当用scanf输入时,就可以顺利通过,然后,把第一种方法也改用scanf输入,发现也能通过。
两种方法:
第一种:
#include <stdio.h>
#include <string.h>
void add(int r[],char strmax[],char strmin[],int maxlen,int minlen);
char str[]="0123456789abcdefghij";
int main()
{
char str1[101];
char str2[101];
int r[102];
while(scanf("%s%s",str1,str2)!=EOF)
{
memset(r,0,sizeof(r));
if (strlen(str1)>=strlen(str2))
{
add(r,str1,str2,strlen(str1),strlen(str2));
}
else
{
add(r,str2,str1,strlen(str2),strlen(str1));
}
}
return 0;
}
void add(int r[],char strmax[],char strmin[],int maxlen,int minlen)
{
int i,d,j=0;
d=maxlen-minlen;
for(i=maxlen-1;i>=0;i--)
{
if (i>=d)
{
if (strmin[i-d]<='9'&&strmin[i-d]>='0')
{
r[j]+=strmin[i-d]-'0';
}
else
{
r[j]+=strmin[i-d]-'a'+10;
}
}
if (strmax[i]<='9'&&strmax[i]>='0')
{
r[j]+=strmax[i]-'0';
}
else
{
r[j]+=strmax[i]-'a'+10;
}
if (r[j]>=20)
{
r[j]=r[j]-20;
r[j+1]=r[j+1]+1;
}
j++;
}
if (!r[j])
{
j=j-1;
}
for(i=j;i>=0;i--)
{
printf("%c",str[r[i]]);
}
printf("\n");
}
第二种方法:
#include <stdio.h> #include <string.h> char str[21]="0123456789abcdefghij"; int main() { int i,k,j; char str1[101]; char str2[101]; int r[102]; while(scanf("%s%s",str1,str2)!=EOF) { j=0; memset(r,0,sizeof(r)); for(i=strlen(str1)-1,k=strlen(str2)-1;i>=0||k>=0;i--,k--,j++) { if (k>=0) { if (str2[k]-'a'>=0) { r[j]+=str2[k]-'a'+10; } else { r[j]+=str2[k]-'0'; } } if (i>=0) { if (str1[i]-'a'>=0) { r[j]+=str1[i]-'a'+10; } else { r[j]+=str1[i]-'0'; } } if (r[j]>=20) { r[j]=r[j]%20; r[j+1]+=1; } } if (!r[j]) { j-=1; } for(i=j;i>=0;i--) { printf("%c",str[r[i]]); } printf("\n"); } return 0; }