1 条题解
-
0
题解:
【解题思路】
本题因为需要判断与1e18的大小关系,直接计算有可能会产生溢出问题,所以本题考虑使用高精度乘法实现
注意:需对0进行特判
#include<bits/stdc++.h> using namespace std; const int N=20; int a[N],b[N],c[N]; int main(){ int n,flag=0,as; cin>>n; string str1; cin>>str1; for(int i=0;i<str1.size();i++) a[str1.size()-1-i]=str1[i]-'0'; as=str1.size(); for(int k=2;k<=n;k++){ string str2; cin>>str2; if(str2.size()==1&&str2[0]=='0') flag=2; if(flag==1||flag==2) continue; memset(b,0,sizeof(b)); memset(c,0,sizeof(c)); for(int i=0;i<str2.size();i++) b[str2.size()-1-i]=str2[i]-'0'; for(int i=0;i<as;i++){ for(int j=0;j<str2.size();j++){ c[j+i]+=a[i]*b[j]; c[j+1+i]+=c[j+i]/10; c[j+i]%=10; } } as=as+str2.size(); while(c[as-1]==0&&as>1) as--; cout<<endl; if(as>=19){ flag=1; } else{ memset(a,0,sizeof(a)); for(int i=0;i<as;i++) a[i]=c[i]; } } if(flag==0) for(int i=0;i<as;i++) cout<<a[as-i-1]; else if(flag==1) cout<<-1; else cout<<0; return 0; }
- 1
信息
- ID
- 223
- 时间
- 1000ms
- 内存
- 256MiB
- 难度
- 9
- 标签
- (无)
- 递交数
- 370
- 已通过
- 24
- 上传者