本题目的数据类型必须选择long double,否则使用double 精度不够!!!
二者均为浮点数类型,区别如下:
1 double类型为C++原始类型,所有编译器均支持,而long double是C99规范增加的新类型,只有支持C99的编译器才支持long double;
2 占用大小不同,double占8个字节,long double根据编译器实现不同,有占用8,10,12字节和16字节四种;
在long double用8字节实现时,long double 和double没有其它区别。对于其它实现方式,还有以下三项区别:
1 运算速度不同,long double占用字节多,运算速度会慢一些;
2 精度不同,long double可以表示更大的精度;
3 表示范围不同,long double可以表示更大范围的浮点数。
#include<iostream>
#include<cstdio>
using namespace std;
const int N=1e5+10;
long double a[N];
int main(){
int n;
cin>>n;
for(int i=1;i<=n;i++){
scanf("%Lf",&a[i]);
}
long double sum=0;
for(int i=1;i<=n;i++){
sum+=(long double)a[i]*i*(n-i+1);------》这里a[i]要写在前边,因为i*(n-i)会溢出int,而a[i]是double
类型,可能long double的精确度更高,如果类型不为long double,精度方面会有问题!!!
}
printf("%.2Lf",sum+1e-18);-----》注意是%Lf
return 0;
}