大数乘法
发布时间:2020-12-14 03:32:46 所属栏目:大数据 来源:网络整理
导读:大数乘法: 由于计算机的存储量有限,当你要计算的的数值或者输入的数值超过一个最大容量(目前是long),存储,就会出错 因此不能直接得到大数乘法. 我们要得到大数成法,应该另想办法. 仔细观察乘法元算,如: 625*625 如果有 int a[]={6,2,5}; int b[]={6,5};
大数乘法: 由于计算机的存储量有限,当你要计算的的数值或者输入的数值超过一个最大容量(目前是long),存储,就会出错 因此不能直接得到大数乘法. 我们要得到大数成法,应该另想办法. 仔细观察乘法元算,如: 625*625 如果有 int a[]={6,2,5}; int b[]={6,5}; 那么结果c[MAXLEN]={0}; 中的每一位,则为 c[i+j]+=a[i]*b[j]; 全做完后,进行进位处理.即可得到答案.
<span style="color:#000000;">#define MAXLEN 100 #include <string.h> #include <stdio.h> int set_array(int a[],int ful) { int i=0; do{ char c; c=getchar(); if(c-'0'>=0&&c-'0'<=9){ a[MAXLEN-1-i]=c-'0'; i++; }else{ break; } }while(a[MAXLEN-1-i+1]>=0); return i; } void swap(int *a,int *b) { int c; c=*a; *a=*b; *b=c; } void reset_array(int a[],int p,int q) { for(;p<=q;p++,q--) { swap(&a[p],&a[q]); } } int get_fabs(int a[],int la,int b[],int lb,int c[]){ int i=0,j=0; for(i=0;i<la;i++) { for(j=0;j<lb;j++) { c[MAXLEN-1-(i+j)]+=a[MAXLEN-1-i]*b[MAXLEN-1-j]; } } return i+j; } void set_ruler(int num[]) { int i=0; for(i=MAXLEN-1;i>0;i--){ num[i-1]+=num[i]/10; num[i]=num[i]; } } void print_array(int num[],int len) { int i=0; for(i=0;i<len;i++){ printf("%d ",num[i]); } printf("n"); } int main() { int a[MAXLEN]={0},la=-1; int b[MAXLEN]={0},lb=-1; int c[MAXLEN]={0},lc=-1; printf("input op_num_one:(<0will break!)n"); la=set_array(a,MAXLEN); printf("input op_num_tow:(<0will break!)n"); lb=set_array(b,MAXLEN); print_array(a,MAXLEN); print_array(b,MAXLEN); reset_array(a,MAXLEN-la,MAXLEN-1); reset_array(b,MAXLEN-lb,MAXLEN-1); get_fabs(a,la,b,lb,c); set_ruler(c); print_array(c,MAXLEN); }</span> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |