#include<stdio.h>
#include<string.h>
#include <stdlib.h>
int MIN(int a,int b)
{
int res;
res=(a<b)?a:b;
return res;
}
int MAX(int a,int b)
{
int res;
res=(a>b)?a:b;
return res;
}
int main()
{ int i,j;
char a[1024],b[1024] ;
int a1[1024],b1[1024] ;
printf("输入两个大整数,最小30位,最大1024位\n");
scanf("%s" ,a);
scanf("%s",b);
memset( a1 , 0 , sizeof(a1) );
for(j = 0, i = strlen(a)-1 ; i >=0 ; i--)
a1[j++] = a[i] - '0';
memset( b1 , 0 , sizeof(b1) );
for(j = 0, i = strlen(b)-1 ;i >=0 ; i--)
b1[j++] = b[i] - '0';
if(strlen(a)>1024||strlen(a)<30||strlen(b)>1024||strlen(b)<30)
printf("输入错误整数\n");
else
{
int c[1024],k=0,m=0;
while(k<=MIN(strlen(a),strlen(b))-1)//strlen是求字符数组的长度,不能用来求int型的数组
{
c[k]=(a1[k]+b1[k])%10+m;
m=(a1[k]+b1[k])/10;
k++;
}
if(strlen(a)<strlen(b))
{m=(a1[k-1]+b1[k-1])/10;
c[k]=(b1[k]+m)%10;
k++;
}
else
{m=(a1[k-1]+b1[k-1])/10;
c[k]=(a1[k]+m)%10;
k++;
}
m=(a1[k-2]+b1[k-2])/10;
while(k<=MAX(strlen(a),strlen(b))-1&&k>MIN(strlen(a),strlen(b)))
{
if(strlen(a)<strlen(b))
{m=(b1[k-1]+m)/10;
c[k]=(b1[k]+m)%10;
k++;
}
else
{m=(a1[k-1]+m)/10;
c[k]=(a1[k]+m)%10;
k++;
}
}
if(m=1)c[k]=1;
printf("得到的数是");
for(i=MAX(strlen(a),strlen(b));i>=0;i--)
printf("%d",c[i]);
}
printf("\n");
system("pause");
return 0;
}
#include<string.h>
#include <stdlib.h>
int MIN(int a,int b)
{
int res;
res=(a<b)?a:b;
return res;
}
int MAX(int a,int b)
{
int res;
res=(a>b)?a:b;
return res;
}
int main()
{ int i,j;
char a[1024],b[1024] ;
int a1[1024],b1[1024] ;
printf("输入两个大整数,最小30位,最大1024位\n");
scanf("%s" ,a);
scanf("%s",b);
memset( a1 , 0 , sizeof(a1) );
for(j = 0, i = strlen(a)-1 ; i >=0 ; i--)
a1[j++] = a[i] - '0';
memset( b1 , 0 , sizeof(b1) );
for(j = 0, i = strlen(b)-1 ;i >=0 ; i--)
b1[j++] = b[i] - '0';
if(strlen(a)>1024||strlen(a)<30||strlen(b)>1024||strlen(b)<30)
printf("输入错误整数\n");
else
{
int c[1024],k=0,m=0;
while(k<=MIN(strlen(a),strlen(b))-1)//strlen是求字符数组的长度,不能用来求int型的数组
{
c[k]=(a1[k]+b1[k])%10+m;
m=(a1[k]+b1[k])/10;
k++;
}
if(strlen(a)<strlen(b))
{m=(a1[k-1]+b1[k-1])/10;
c[k]=(b1[k]+m)%10;
k++;
}
else
{m=(a1[k-1]+b1[k-1])/10;
c[k]=(a1[k]+m)%10;
k++;
}
m=(a1[k-2]+b1[k-2])/10;
while(k<=MAX(strlen(a),strlen(b))-1&&k>MIN(strlen(a),strlen(b)))
{
if(strlen(a)<strlen(b))
{m=(b1[k-1]+m)/10;
c[k]=(b1[k]+m)%10;
k++;
}
else
{m=(a1[k-1]+m)/10;
c[k]=(a1[k]+m)%10;
k++;
}
}
if(m=1)c[k]=1;
printf("得到的数是");
for(i=MAX(strlen(a),strlen(b));i>=0;i--)
printf("%d",c[i]);
}
printf("\n");
system("pause");
return 0;
}