1049 数列的片段和 (20分)

1049 数列的片段和 (20分)_第1张图片

#include
int main(){
    int n;
    double v, ans=0;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        scanf("%lf", &v);
        ans = ans + i * (n + 1 - i) * v;

    }
    printf("%.2f\n", ans);
    return 0;
}

1049 数列的片段和 (20分)_第2张图片

i * (n + 1 - i)为int*int发生溢出,导致结果错误

#include
int main(){
    int n;
    double v, ans = 0;
    scanf("%d", &n);
    for(int i = 1; i <= n; i++){
        scanf("%lf", &v);
        ans = ans + (double)i * (double)(n + 1 - i) * v;

    }
    printf("%.2f\n", ans);
    return 0;
}

进行类型转换,可得满分

#include
int main(){
    int n;
    scanf("%d", &n);
    double a[n], sum = 0;
    for(int i = 0; i < n; i++){
        scanf("%lf", &a[i]);
        sum += (n - i) * a[i] * (i + 1);
    }
    printf("%.2f\n", sum);
    return 0;
}

intdouble自动转double,再int转double

你可能感兴趣的:(1049 数列的片段和 (20分))