I题我真不理解了,第一个for循环从62开始就AC,42开始就百分之25正确,32开始就百分之75正确,什么原因啊。题目不是保证n小于2的32次方吗
#include<bits/stdc++.h> using namespace std; #define int long long #define endl '\n' int fac[70]; signed main() { ios::sync_with_stdio(0); cin.tie(0),cout.tie(0); int n; cin>>n; if(n==0) { cout<<0; return 0; } int len=__builtin_popcount(n); len--; int ans=0; for(int i=62;i>=0;i--) { if(n&(1<<i)) { ans+=(1<<i); break; } } fac[0]=1; for(int i=1;i<=62;i++) fac[i]=fac[i-1]*2; ans+=fac[len]-1; cout<<n-ans; }
全部评论
(1) 回帖