这是我自己写的大数相加的代码,看起来有些长,不过胜在好理解。。。
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
void reverse(char *s)
{
int i,j,len;
char temp;
len=strlen(s);
for(i=0,j=len-1;i<j;j--,i++){
temp=s[i];
s[i]=s[j];
s[j]=temp;
}
}
int CTN(char c){ // 字符转化为数字
int n;
if(c>='0' && c<='9') n=c-'0';
else if(c>='a' && c<='j') n=c-'a'+10;
return n;
}
char NTC(char n){
char ch;
if(n>=0 && n<=9) ch=n+'0'; // 数字转化为字符
else if(n>=10 && n<20) ch=n+'a'-10;
return ch;
}
int main()
{
int i,j,len1,len2,l,c,n;
char s1[105],s2[105];
int m[105];
scanf("%d",&n);
memset(s1,0,sizeof(s1));
while(n--){
scanf("%s",s1);
len1=strlen(s1);
reverse(s1);
memset(m,0,sizeof(m));
for(i=0;i<len1;i++)
m[i]=CTN(s1[i]);
memset(s2,0,sizeof(s2));
while(scanf("%s",s2) && strcmp(s2,"0")){
len1=strlen(s1);
len2=strlen(s2);
reverse(s2);
l=len1>len2?len1:len2;
for(i=0,c=0;i<l||c;i++ )
{
if( i<len1)
c+=m[i];
if( i<len2 )
c+=CTN(s2[i]);
m[i]=c%10;
c/=10;
s1[i]=NTC(m[i]);
}
memset(s2,0,sizeof(s2));
}
while(!m[i]){
--i;
if(i<0) {printf("0"); break;}
}
for( ;i>=0;i--){
s1[i]=NTC(m[i]);
printf("%c",s1[i]);
}
printf("\n");
if(n) printf("\n");
}
//system("pause");
return 0;
}