poj2389 普通的大数乘法
发布时间:2021-02-24 12:24:42 所属栏目:大数据 来源:网络整理
导读:= =、每次这种题目说只有40位 然而要开到100位,心里总是一万匹草泥马在奔腾; #include iostream #include stdio.h #include string.h #include stack #include queue #include map #include set #include vector #include math.h #include algorithm using
= =、每次这种题目说只有40位 然而要开到100位,心里总是一万匹草泥马在奔腾; #include <iostream> #include <stdio.h> #include <string.h> #include <stack> #include <queue> #include <map> #include <set> #include <vector> #include <math.h> #include <algorithm> using namespace std; #define LL long long const double pi = acos(-1.0); #define Len 200005 #define mod 19999997 const int INF = 0x3f3f3f3f; #define exp 1e-6 int s1[200]; int s2[200]; int tep[200]; int ans[200]; char st1[200]; char st2[200]; void Init() { memset(ans,0,sizeof(ans)); memset(tep,sizeof(tep)); memset(s1,sizeof(s1)); memset(s2,sizeof(s2)); } int init_st1() { int len,num; len=strlen(st1); num=0; for(int i=len-1;i>=0;i--) { s1[num++]=st1[i]-'0'; } return num; } int init_st2() { int len,num; len=strlen(st2); num=0; for(int i=len-1;i>=0;i--) { s2[num++]=st2[i]-'0'; } return num; } void add_solve() { int x,f=0; int num=0; for(int i=0;i<110;i++) { x=ans[i]+tep[i]; x+=f; f=x/10; ans[num++]=x%10; } if(f) ans[num++]+=f; } void mul_solve(int num,int len,int n) { int x; memset(tep,sizeof(tep)); int f=0; for(int i=0;i<len;i++) { x=s1[i]*n; x+=f; f=x/10; tep[num++]=x%10; } if(f) tep[num++]+=f; add_solve(); } int main() { scanf("%s%s",st1,st2); Init(); int L1=init_st1(); int L2=init_st2(); for(int i=0;i<L2;i++) { mul_solve(i,L1,s2[i]); } int k; int flag=0; for(int i=150;i>=0;i--) { if(ans[i]) { flag=1; k=i; break; } } if(!flag) { printf("0"); return 0; } for(int i=k;i>=0;i--) { printf("%d",ans[i]); } return 0; } (编辑:青岛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
站长推荐