大数乘法
发布时间:2020-12-14 03:38:26 所属栏目:大数据 来源:网络整理
导读:/************************************************************************* File Name: bignum.cpp Author: yubo Mail: yuzibode@126.com Created Time: 2014年04月06日 星期日 17时16分36秒 学习重点:在积的数组中后期不是很好处理,手动模拟后你会发现
/************************************************************************* File Name: bignum.cpp Author: yubo Mail: yuzibode@126.com Created Time: 2014年04月06日 星期日 17时16分36秒 学习重点:在积的数组中后期不是很好处理,手动模拟后你会发现c[i]中的每一位其实就是实际运算的每一位的乘积,然后再分析>10的情况. 然后再就是自己注意位数的限制,我觉得这种方式真的很帅,现在还有就是一个大数除法,以及浮点型的运算 ************************************************************************/ #include<cstring> #include<cstdio> #include<iostream> #define MAXN 1000 using namespace std; char str[2*MAXN+10]; void Multi(char str1[],char str2[]) { int len1,len2,i,j; int a[MAXN],b[MAXN],c[MAXN*2+10],flag=1; memset(a,sizeof(a)); memset(b,sizeof(b)); memset(c,sizeof(c)); len1=strlen(str1); for(j=0,i=len1-1;i>=0;i--)//把数字倒过来 a[j++]=str1[i]-'0'; len2=strlen(str2); for(j=0,i=len2-1;i>=0;i--)//倒转第二个数字 b[j++]=str2[i]-'0'; if((len1==1)&&a[0]==0||(len2==1&&b[0]==0)) { printf("0"); flag=0; } for(i=0;i<len2;i++)//用第二个数乘以第一个数,每次一位<F5> for(j=0;j<len1;j++) c[i+j]+=b[i]*a[j]; for(i=0;i<MAXN;i++)// if(c[i]>=10) { c[i+1]+=c[i]/10; c[i]%=10; } for(i=MAXN-1;i>=0;i--) if(c[i]) break; for(j=i;j>=0&&flag;j--) { printf("%d",c[j]);//在计算大数乘法的时候,要打印的数字 str[i]=(char)c[j]+'0'; //printf("%c",str[i]);//以字符型式打印 } printf("n"); } int main() { char a[50],b[50]; int n;//幂次数 scanf("%s%s",a,b); Multi(b,a); (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |