大数乘法模板
发布时间:2020-12-14 02:12:46 所属栏目:大数据 来源:网络整理
导读:/*两个非常大的数相乘模拟乘法运算*/#includeiostream#includecstdio#includecstring#includecstdlib#includecmath#includealgorithm#includestack#includecmathusing namespace std;#define MAX_N 221 int a1[MAX_N],a2[MAX_N]; char s1[MAX_N],s2[MAX_N];
/* 两个非常大的数相乘 模拟乘法运算 */ #include<iostream> #include<cstdio> #include<cstring> #include<cstdlib> #include<cmath> #include<algorithm> #include<stack> #include<cmath> using namespace std; #define MAX_N 221 int a1[MAX_N],a2[MAX_N]; char s1[MAX_N],s2[MAX_N]; int p[MAX_N*2]; int main() { gets(s1); gets(s2); int i,j; int len1=strlen(s1); //将数组里的内容变为0 memset(a1,sizeof(a1)); memset(a2,sizeof(a2)); memset(p,sizeof(p)); j=0; for(i=len1-1; i>=0; i--) //用数组倒着记录字符串里的数据 { a1[j++]=s1[i]-'0'; } j=0; int len2=strlen(s2); for(i=len2-1; i>=0; i--) { a2[j++]=s2[i]-'0'; } for(i=0; i<len1; i++) { for(j=0; j<len2; j++) { p[i+j] += a1[i]*a2[j];//模拟乘法 可以自己在草稿纸上写乘法然后运算看看是否满足这个规律 } } for(i=0; i<MAX_N*2; i++) //进位 { if(p[i]>=10) { p[i+1]+=p[i]/10; p[i]%=10; } } for(i=MAX_N*2-1; i>=0; i--) //找到第一个非零点 { if(p[i]) break; } for(int k=i; k>=0; k--) //从后往前输出 { printf("%d",p[k]); } printf("n"); return 0; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |