PAT A1011 Sum of Number Segments

这题最后两个测试总是跑不通,最后发现是加法和乘法运算中数值较大,double和int的精度都不够,得使用long double和long int才行。

#include<cstdio>

using namespace std;
const int N = 100010;

long int dp[N]={0};

int main(){
    //输入
    int n;
    scanf("%d",&n);
    double v;
    long double sum = 0;
    for(int i = 0 ; i < n ; i++){
        scanf("%lf",&v);
        if(i == 0) dp[i] = n;
        else dp[i] =dp[i-1]+n-(2*i) ;
        sum += dp[i]*v;
    }
    
    //输出
    printf("%.2Lf\n",sum);
    return 0;
    
}
posted @ 2020-08-24 19:49  是水泵呢  阅读(63)  评论(0编辑  收藏  举报