题意:
给你n个数,问你这n个数之积
如果结果大于1e18就输出-1
n<=1e5
0<=数<=1e18
这种菜题我还不是一刀切
我知道长整型溢出得到负数,边乘边判断,溢出后break就vans了!
数可能有0,最后还必须判断一下
试验一下,好像可能会2度溢出
比如两个值为1e10的longlong相乘结果是正数
改用除法判断是否超过范围
除之前乘积可能已经是0了,必须先判断……
又被练了
代码:

1 #include<iostream> 2 #include<cstdio> 3 using namespace std; 4 #define LL long long 5 int n; LL a[110000]; 6 int main(){ 7 cin>>n; 8 for(int i=1;i<=n;++i) scanf("%lld",&a[i]); 9 LL bwl=1; 10 LL cmp=1LL*1000000000*1000000000; 11 for(int i=1;i<=n;++i){ 12 if(bwl==0) break; //attention3 13 if(cmp/bwl<a[i]){ //attention 14 bwl=-1; 15 break; 16 } 17 bwl=bwl*a[i]; //attention2 18 } 19 for(int i=1;i<=n;++i)if(a[i]==0){ 20 bwl=0; 21 break; 22 } 23 cout<<bwl<<endl; 24 return 0; 25 }