【高精度】Day 2 提高组模拟C组 T1 密码

xiaoxiao2021-02-28  61

题目描述

题目大意

n n 个数相乘,求积

解题思路

这道题描述有毒。。。 10241024写成了1024,搞得我打了一个30分的高精乘单精。。。

30分代码

#include<cstdio> #define mod 100000000 #define M 400 using namespace std;long long ans[M+1],x; int n,j; void mul(long long x) { long long g=0; for(int j=M;j>0;j--) { long long d=ans[j]*x+g; ans[j]=d%mod; g=d/mod; } return; } int main() { scanf("%d",&n); ans[M]=1; while(n--) scanf("%lld",&x),mul(x); for(j=1;!ans[j];j++);printf("%lld",ans[j]); for(int i=j+1;i<=M;i++) { if(ans[i]<1e7) putchar(48); if(ans[i]<1e6) putchar(48); if(ans[i]<1e5) putchar(48); if(ans[i]<1e4) putchar(48); if(ans[i]<1e3) putchar(48); if(ans[i]<1e2) putchar(48); if(ans[i]<1e1) putchar(48); printf("%lld",ans[i]); } }

100分代码

#include<cstdio> #include<cstring> #define M 2501 using namespace std;int ans[M+1],x,b[51],c[M+1]; char yc[51]; int n,j; void mul() { int len; for(len=M;!ans[len];len--); for(int i=1;i<=M;i++) {c[i]=ans[i];ans[i]=0;} int m=strlen(yc); for(int i=0;i<m;i++) b[m-i]=yc[i]-48; for(int i=1;i<=len;i++) { int g=0; for (j=1;j<=m;j++) { ans[i+j-1]=c[i]*b[j]+g+ans[i+j-1]; g=ans[i+j-1]/10; ans[i+j-1]%=10; } ans[i+m]=g; } return; } int main() { scanf("%d",&n); ans[1]=1; while(n--) { scanf("%s",yc); mul(); } for(j=M;!ans[j]&&j>1;j--); for(int i=j;i>0;i--) putchar(ans[i]+48); }
转载请注明原文地址: https://www.6miu.com/read-2632419.html

最新回复(0)