zoukankan      html  css  js  c++  java
  • 【AtCoder Beginner Contest 169】B Multiplication 2

    题意:

    给你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
  • 相关阅读:
    JSON序列化选项
    JOSN的stringify()和parse()方法
    html5增强元素--续
    html5页面增强元素
    js继承模式
    js常用设计模式
    js跨浏览器事件处理
    前端兴趣浓厚,后端提不起来兴趣
    padding的讲究
    margin的讲究
  • 原文地址:https://www.cnblogs.com/cdcq/p/13216085.html
Copyright © 2011-2022 走看看