电脑桌面
添加小米粒文库到电脑桌面
安装后可以在桌面快捷访问

大整数乘法(分治法)

大整数乘法(分治法)_第1页
1/6
大整数乘法(分治法)_第2页
2/6
大整数乘法(分治法)_第3页
3/6
#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...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。
3、如文档内容存在违规,或者侵犯商业秘密、侵犯著作权等,请点击“违规举报”。

碎片内容

大整数乘法(分治法)

确认删除?
VIP
微信客服
  • 扫码咨询
会员Q群
  • 会员专属群点击这里加入QQ群
客服邮箱
回到顶部