关注
我事后想了一下,double被卡精度应该是过程中加到了一个比较大的数,double用了很多位去表示整数部分。办法就是利用一个long long去模拟,由于没有负数还可以是unsigned的,等于完整利用上了64位精度。具体操作就是在每次加上去前 *N,N是一个合适的较大值,最后再除掉,这样模拟了一个固定阶数的小数。代码放在下面,没有仔细调输出,并且也不能保证能ac,毕竟我没办法再测试了。另一种思路就是每次都将整数部分提取出来放到一个int里,这样double可以完整保留小数部分的精度。
#include<bits/stdc++.h>
using namespace std;
unsigned long long N=10000000000;
unsigned long long M=N/10000;
int main()
{
int n=10000;
unsigned long long sum=0;
if(n==1){
printf("1.0000\n");
return 0;
}
for(int i=1; i<=n-1; i++){
int j=n-i;
if(abs(i-j)<2){
sum = sum + N*max(i,j);
}else{
sum = sum + N*min(i,j);
int k=abs(i-j);
unsigned long long temp=0;
for(int t=1; t<=k-1; t++){
temp = temp + N*max(t, k-t);
}
sum = sum + temp/(k-1);
}
}
unsigned long long res = sum/(n-1);
double ret = res/N + res%N/M;
if(res%N/M==0) printf("%.4lf\n", ret);
else printf("%d.%d\n", res/N, res%N/M);
}
查看原帖
2 5
相关推荐
点赞 评论 收藏
分享

点赞 评论 收藏
分享
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 写给毕业5年后的自己 #
4690次浏览 102人参与
# 国央企笔面经互助 #
129843次浏览 1080人参与
# 华泰证券Fintech星战营 #
169168次浏览 195人参与
# 职场捅娄子大赛 #
323055次浏览 3290人参与
# 制造业的秋招小结 #
87735次浏览 1602人参与
# 一人一个landing小技巧 #
60799次浏览 968人参与
# 好好告别我的学生时代 #
47646次浏览 892人参与
# 毕业季等于分手季吗 #
17012次浏览 212人参与
# 晒一下我的毕业照 #
34657次浏览 392人参与
# 海信求职进展汇总 #
65284次浏览 359人参与
# 如何缓解求职过程中的焦虑? #
8111次浏览 106人参与
# 记录实习开销 #
30243次浏览 210人参与
# 如果今天是你的last day,你会怎么度过? #
22918次浏览 199人参与
# 毕业租房也有小确幸 #
110112次浏览 4327人参与
# 当下环境,你会继续卷互联网,还是看其他行业机会 #
108514次浏览 783人参与
# HR问:你期望的薪资是多少?如何回答 #
40273次浏览 525人参与
# 上班苦还是上学苦呢? #
223163次浏览 1331人参与
# 我的省钱小妙招 #
16274次浏览 328人参与
# 工作两年想退休了 #
120148次浏览 1120人参与
# 牛客租房专区 #
70038次浏览 977人参与
# 晒晒我司的端午福利 #
14938次浏览 99人参与