关注
我事后想了一下,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
相关推荐
牛客热帖
正在热议
# 25届秋招总结 #
379879次浏览 3769人参与
# 如果再来一次,你还会选择这个工作吗? #
103048次浏览 1040人参与
# 北方华创开奖 #
64792次浏览 505人参与
# 地方国企笔面经互助 #
6120次浏览 14人参与
# 简历被挂麻了,求建议 #
2527504次浏览 33474人参与
# 发工资后,你做的第一件事是什么 #
4938次浏览 19人参与
# 阿里云管培生offer #
46544次浏览 1381人参与
# ai智能作图 #
11949次浏览 190人参与
# 我的实习求职记录 #
6108065次浏览 83848人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
9032次浏览 185人参与
# 上班到公司第一件事做什么? #
14618次浏览 165人参与
# 阿里求职进展汇总 #
71884次浏览 780人参与
# 如何写一份好简历 #
616167次浏览 8700人参与
# 听到哪句话就代表面试稳了or挂了? #
96802次浏览 810人参与
# 还记得你第一次面试吗? #
29943次浏览 422人参与
# 华为工作体验 #
109463次浏览 852人参与
# 面试体验感最好的是哪家? #
91654次浏览 921人参与
# 网易求职进展汇总 #
38961次浏览 334人参与
# 如果有时光机,你最想去到哪个年纪? #
27155次浏览 561人参与
# 腾讯求职进展汇总 #
205929次浏览 1688人参与
# 硬件兄弟们 甩出你的华为奖状 #
76136次浏览 615人参与
# 上班苦还是上学苦呢? #
107026次浏览 870人参与