avatar-decorate
煎饼果子w level
获赞
64
粉丝
12
关注
4
看过 TA
59
卡内基·梅隆大学
2022
Java
IP属地:上海
暂未填写个人简介
私信
关注
头像
2021-09-02 15:04
卡内基·梅隆大学 Java
0 点赞 评论 收藏
分享
头像
2021-06-01 21:08
卡内基·梅隆大学 Java
0 点赞 评论 收藏
分享
头像
2021-03-29 22:13
卡内基·梅隆大学 Java
0 点赞 评论 收藏
分享
头像
2021-03-26 13:35
卡内基·梅隆大学 Java
0 点赞 评论 收藏
分享
头像
2021-03-16 09:27
已编辑
卡内基·梅隆大学 Java
第一题:翻转数字   给你三个数a,b,c,可以对a或b进行多次翻转,[一次翻转的意思是取一位二进制进行翻转(比如0->1,或者1->0)],现在问你最少需要多少次翻转可以使得翻转后的a|b=c。      这道题在leetcode上有,见 https://leetcode-cn.com/problems/minimum-flips-to-make-a-or-b-equal-to-c/      这里给一下我的代码吧~   import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import ...
F21H_:我事后想了一下,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); }
0 点赞 评论 收藏
分享
头像
2021-03-07 20:19
卡内基·梅隆大学 Java
0 点赞 评论 收藏
分享
头像
2021-03-06 20:52
卡内基·梅隆大学 Java
0 点赞 评论 收藏
分享

创作者周榜

更多
关注他的用户也关注了:
牛客网
牛客网在线编程
牛客网题解
牛客企业服务