#include #include #include #include #define DATASIZE 1000 //该函数用以接收用户输入的大整数,返回值为该大整数的数字位数 int InputBigInt(int arr[]) { char ch; int i=0; printf("Input a Big Interger:"); while(1) { scanf("%c",&ch); if(ch=='\n') break; else arr[i++]=ch-'0'; } return i; } //该函数通过在较短的大整数之前填充0 的方式,将两个大整数的位数对齐,返回值为较长的那个大整数的位置 int AlignArray(int *a,int len_a,int *b,int len_b) { int len_align=len_a; if(len_a>len_b) { for(int i=len_b-1;i>=0;i--) b[i+(len_a-len_b)]=b[i]; for(int i=0;i=0;i--) a[i+(len_b-len_a)]=a[i]; for(int i=0;i=0;i--) { int t=a[i]+b[i]+carry; c[i+1]=t%10; carry=t/10; } c[0]=carry; return length+1; } //两个长度为 length 的大整数做减法,得到的结果放到数组 C 中,长度为 length int Sub(int a[],int b[],int c[],int length) { int borrow=0; for(int i=length-1;i>=0;i--) { a[i]=a[i]-borrow; if(a[i]>=b[i]) { c[i]=a[i]-b[i]; borrow=0; } else { int t=a[i]+10-b[i]; borrow=1; } } return length; } //分治法求两个大整数的乘积,它只需要更少次数的乘法,但是它必须递归 int DividBigIntMultiply(int a[],int b[],int c[],int len) { int l=len/2; if(len==1) { int t=a[0]*b[0]; c[0]=t/10; c[1]=t%10; return 2; } else if(len==2) { int t1=a[1]*b[1]; c[3]=t1%10; int t2=a[0]*b[1]+a[1]*b[0]+t1/10; c[2]=t2%10; int t3=a[0]*b[0]+t2/10; c[1]=t3%10; c...