首页 > 其他 > 详细

【AtCoder Beginner Contest 169】B Multiplication 2

时间:2020-06-30 23:01:19      阅读:83      评论:0      收藏:0      [点我收藏+]

题意:

给你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 }
View Code

 

【AtCoder Beginner Contest 169】B Multiplication 2

原文:https://www.cnblogs.com/cdcq/p/13216085.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!