1049 数列的片段和 (20分)

一道找规律的题,所以说做题的时候草稿纸还是必须摆上的~

记录一下这道题的原因是因为,即使你推出了公式,不注意精度和溢出问题这道题的第三个测试点还是会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;
}

 

发布了36 篇原创文章 · 获赞 9 · 访问量 1447
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览