PAT1049测试点2的坑

开场白

PAT1049地址
下面是我的提交记录PAT1049测试点2的坑_第1张图片一开始我的代码长得这样

#include 
using namespace std;
int main() {
    int n;
    cin >> n;
    double sum = 0.0, temp;
    for (int i = 1; i <= n; i++) { 
        cin >> temp;
        sum = sum + temp * i * (n - i + 1);
    }
    printf("%.2f", sum);
    return 0;
}

分析

测试点2不通过,然后看博客,地址,提醒我50000*50000int是会溢出的
我就换成了longlong,并搞了个新变量,存50000*50000的值,发现依然不对,在自己机器上试了之后,发现,longlong存不了50000*50000的值,也就是longlong存不了2500000000,我痛恨自己为何搞新变量,直接算还可以和temp相乘把值降下来,咦,这怎么又回去了。那我原来的代码怎么错的?
这里解释,C++对类型转换的规定,浮点和整型进行算术运算,整型往浮点扩,因此这个方向不会出现丢失精度的情况。
这样看,最有可能的原因就是double都不够用了,换longdouble吧,一测试,过了。

#include
using namespace std;
int main(){
	int n;
	cin>>n;
	long double sum=0.0, temp;
	for(int i=1;i<=n;i++){
		cin>>temp;
		sum=sum+(temp*i)*(n-i+1);
	}
	printf("%.2llf", sum);
	return 0;
}

反思

其实上边的分析,是我写这篇博客的时候想的,事后诸葛亮,比谁都明白。
自己在疯狂提交的时候,一点都不冷静,都快疯批了,而且一开始网上搜的说能过测试点2的博客也都不行,无法通过。比如我上边给出的博客地址代码我都试了提交,依然测试点2不通过,唉。当时感觉想打人~,太暴躁太暴躁
我后来想是不是后台又更新测试数据了,然后把博客搜索范围限制到1周内,果然,有结果,地址
我不是很清楚代码的操作,他里边给出的AC代码我也没有尝试,我就是把我的代码的sum的类型改成longdouble就通过了。
以上~

后记

人家都提示数据修正了,唉
PAT1049测试点2的坑_第2张图片

你可能感兴趣的:(入门级刷题)