UVA 11059(水题)

来源:互联网 发布:java 什么是存储过程 编辑:程序博客网 时间:2024/06/08 19:35


这里写图片描述
【题目大意】
给定一个序列S,最多18个元素,每个元素的范围都是-10到10,对于这个序列S的所有连续子序列,求这些连续子序列中最大的正积。如果最大的积是负数,答案视为0。
【解法】
两重循环,枚举S所有的子序列
【坑点】
如果是18个10相乘得到10^18,会超出int的范围,所以要用long long类型
【AC代码】

#include <cstdio>#include <cstring>#include <iostream>#include <cstdlib>#include <cmath>using namespace std;int main(){    int N;    long long s[25];    long long ans;    int cas = 1;    while(scanf("%d", &N) != EOF){        for(int i = 0 ; i < N; i++){            scanf("%lld", &s[i]);        }        ans = s[0];        long long  term;        for(int i = 0; i < N; i++){            term = s[i];//            printf("term = %lld\n", term);            ans = max(ans, term);            for(int j = i + 1; j < N; j++){                term *= s[j];//                printf("term = %lld\n", term);                ans = max(ans, term);            }        }        if(ans > 0){            printf("Case #%d: The maximum product is %lld.\n\n", cas, ans);        }        else{            printf("Case #%d: The maximum product is 0.\n\n", cas);        }        cas++;    }    return 0;}
0 0