#include<stdio.h>
#include<string.h>
#include<math.h>
#define MAX 4000/*数位上限*/
dd(char *a)
{
char t[MAX]
int i,j
for(i=0i<MAXi++)
{
if(a[i]==NULL)
{
for(j=0i>0j++,i--)
{
t[j]=a[i-1]
}
strncpy(a,t,j)
break
}
}
}
add1(char *a,char *b,int n,char *c)
{
int N
if(*a!=NULL&&*b!=NULL)
N=*a-'0'+*b-'0'+n
else if(*a==NULL&&*b!=NULL)
N=*b-'0'+n
else if(*a!=NULL&&*b==NULL)
N=*a-'0'+n
else
N=n
*c=(N%10)+'0'
N=N/10
if(*(a+1)!=NULL||*(b+1)!=NULL||N!=0)
{
add1(a+1,b+1,N,c+1)
}
}
addab(char *a,char *b,char *c)
{
dd(a)
dd(b)
dd(c)
add1(a,b,0,c)
dd(a)
dd(b)
dd(c)
}
d_(char *a)
{
int i
for(i=0a[i]!=NULLi++)
{
a[i]=a[i+1]
}
}
udg1(char *a,char *b,int n,char *c)
{
int N
if(*b==NULL)
{
N=*a-'0'-n
n=0
}
else
{
if(*a>=(*b+n))
{
N=*a-*b-n
n=0
}
else
{
N=*a+10-*b-n
n=1
}
}
*c=N+'0'
if(*(a+1)!=NULL)
udg1(a+1,b+1,n,c+1)
}
udg(char *a,char *b,char *c)
{
int i
if((strcmp(a,b)>0&&strlen(a)==strlen(b))||strlen(a)>strlen(b))
i=1
else if((strcmp(a,b)<0&&strlen(a)==strlen(b))||strlen(b)>strlen(a))
i=-1
else
i=0
dd(a)
dd(b)
dd(c)
if(i==1)
udg1(a,b,0,c)
else if(i==-1)
{
udg1(b,a,0,c)
for(i=0i<MAXi++)
{
if(c[i]==NULL)
{
c[i]='-'
break
}
}
}
else
*c='0'
dd(a)
dd(b)
dd(c)
}
add_(char *c)
{
int i
char t1,t2
t1=c[0]
t2=c[1]
c[0]='-'
for(i=1t1!='\0'i++)
{
c[i]=t1
t1=t2
t2=c[i+1]
}
}
main()
{
char a[MAX]={NULL},b[MAX]={NULL},c[MAX]={NULL}
printf("输入两个数:\n")
scanf("%s",a)
getchar()
scanf("%s",b)
getchar()
if(a[0]!='-'&&b[0]!='-')
{
addab(a,b,c)
}
else
{
if(a[0]=='-'&&b[0]!='-')
{
d_(a)
udg(b,a,c)
}
else if(a[0]!='-'&&b[0]=='-')
{
d_(b)
udg(a,b,c)
}
else
{
d_(b)
d_(a)
addab(a,b,c)
add_(c)
}
}
printf("%s\n",c)
getchar()
}
#include <stdio.h>#include <string.h>#define MAXLEN 1000void longadd(char* s1,char* s2 ,int* s3){int arr1[MAXLEN] int arr2[MAXLEN] int arr3[MAXLEN] int i //求字符串长度 倒序放在int 数组里面
int len1 = strlen(s1) for( i = 0i <len1i++)
{
arr1[i] = s1[len1-1-i] - '0'
}//求字符串长度 倒序放在int 数组里面
int len2 = strlen(s2) for( i = 0i <len2i++)
{
arr2[i] = s2[len2-1-i] - '0'
}//加法运算
for( i = 0i <MAXLENi++)
{
arr3[i] = arr1[i] + arr2[i]
}//数据处理 超过9的 进行取余 并且进位
for( i = 0i <MAXLENi++)
{if(arr3[i] >= 10)
{
arr3[i+1] += arr3[i] / 10
arr3[i] = arr3[i] % 10
}
s3[i] = arr3[i]
}return
}int main(int argc, char const *argv[])
{char buff1[MAXLEN] char buff2[MAXLEN] int arr[MAXLEN] puts("input 1:")
gets(buff1) puts("input 2:")
gets(buff2)
longadd(buff1,buff2,arr) //通过z变量的值过滤前面的0 倒序输出
int z = 0 for(int j =MAXLEN -1 j >= 0 j-- )
{if(z == 0)
{if(arr[j] != 0)
{printf("%d",arr[j])
z= 1
}
}else
{printf("%d",arr[j])
}
}//如果z值没有改变 则输出0
if( z== 0)
{printf("0\n")
}return 0
}