第一个代码是对的,第二个代码出错的原因如下:
- 注意是否存在某些中间值溢出错误,比如,a = b * c; a为double,b和c都为int,但是有可能b*c的结果超过int的表示范围,虽然没有超过a的表示范围,但是因为计算时暂存int类型中,导致溢出错误。
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cmath>
#define maxn 1001000
using namespace std;
double num[maxn];
int N;
int main() {
scanf("%d", &N);
int i;
for (i = 0; i < N; i++) {
scanf("%lf", &num[i]);
}
double total = 0;
for (i = 0; i < N; i++) {
total += num[i] * (i + 1) * (N - i);
}
printf("%.2f\n", total);
return 0;
}
#include<cstdio>
#include<vector>
#include<algorithm>
#include<cmath>
#define maxn 1001000
using namespace std;
double num[maxn], mul[maxn];
int N;
int main() {
scanf("%d", &N);
int i;
for (i = 0; i < N; i++) {
scanf("%lf", &num[i]);
}
for (i = 0; i < N; i++) {
mul[i] = (i + 1) * (N - i);
}
double total = 0;
for (i = 0; i < N; i++) {
total += num[i] * mul[i];
}
printf("%.2f\n", total);
return 0;
}