一道找规律的题,所以说做题的时候草稿纸还是必须摆上的~
记录一下这道题的原因是因为,即使你推出了公式,不注意精度和溢出问题这道题的第三个测试点还是会WA
一开始我写的是ans+=(n+1-i)*i*num[i];但是WA了,原因就在于(n+1-i)*i大于了int 的最大范围
(可能看来在运算中间过程时,int*int的结果虽然没有赋值给某个变量,但程序默认这还是个int的数?!)
可以把1.for(int i=1;i<=n;i++)改为for(long long i=1;i<=n;i++)
或者是2.把ans+=(n+1-i)*i*num[i];改为ans+=num[i]*(n+1-i)*i;
#include<algorithm>
#include<iostream>
using namespace std;
const int maxn=1e5+100;
double num[maxn];
int n;
int main(){
double ans=0;
cin>>n;
for(int i=1;i<=n;i++) cin>>num[i];
for(int i=1;i<=n;i++){
ans+=num[i]*(n+1-i)*i;
}
printf("%.2lf\n",ans);
return 0;
}