大数相加
将数用字符串存储,逐位相加,最后处理进位。
#include<string.h>
#include<stdio.h>
#define length 1000
int max(int l1,int l2);
char* largesum(char a[],char b[]);
void string_rerverse(char str[]);
int main()
{
char a[length+1],b[length+1];
gets(a);
gets(b);
printf("%s\n",largesum(a,b));
}
char* largesum(char str1[],char str2[])//大数相加存在 str2(存储在位数大的数组里
{
int L1,L2,L,temp;
L1=strlen(str1);L2=strlen(str2);
L=max(L1,L2);
if(L1>L2)
{
char *exchang;
exchang=str1;str1=str2;str2=exchang;//若strlen(str1)>strlen(str2)交换
}
string_rerverse(str1);//字符串反转
string_rerverse(str2);
for(int i=0;i<strlen(str1);i++)//相加
{
str2[i]=str2[i]-'0'+str1[i];
}
for(int j=0;j<L;j++)//进位处理
{
temp=(str2[j]-'0')/10;
if(j==L-1&&temp!=0)
{
str2[j]=(str2[j]-'0')%10+'0';
str2[j+1]='0'+temp;
break;
}
str2[j]=(str2[j]-'0')%10+'0';
str2[j+1]+=temp;
}
str2[L+1]='\0';
string_rerverse(str2);
return str2;
}
void string_rerverse(char str[])//字符串反转
{
char temp;
for(int i=0,j=strlen(str)-1;j>i;j--,i++)
{
temp=str[i];
str[i]=str[j];
str[j]=temp;
}
}
int max(int l1,int l2)
{
if(l1>l2)
return l1;
else
return l2;
}