问题原因
- 原因在于计算机内部的加减乘除运算是通过加法器二进制运算来完成的,而二进制是无法准确表示一个浮点数的,只能在有限的精度内逼近这个值。
- 因此我们可以通过把一些数据扩大一定的倍数进行运算,最后再除去扩大的倍数。(详情见代码)
AC代码
#include<stdio.h>
int main(){
int n;
long long sum = 0;
scanf("%d", &n);
for(int i = 1; i <= n; i++){
double temp;
scanf("%lf", &temp);
sum += (long long)(temp * 1000) * i * (n + 1 - i);
}
printf("%.2f", sum/1000.0);
return 0;
}