#include <bits/stdc++.h>
using namespace std;
long long cnt, m;
long long dfs(long long n){
if (n/2<m || n-n/2<m){
cnt++;
return cnt;
}
dfs(n/2);
dfs(n-n/2);
return cnt;
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
long long n;
while (cin >> n >> m){
cnt = 0;
if (n < m){
cout << '0' << '\n';
}
else {
cout << dfs(n) << '\n';
}
}
return 0;
}
遞迴慢,堆疊太多層
假設n=10,m=3
第一層會是n=10
第二層會是n=5 cnt+1
return
接續第一層,第二層會是10-10/2 cnt+1
return
才結束,這樣的code會因為n>>m的時候
導致stack overflow
可以用位元運算子會比較快
N/2 - > N>>1右移
例如000101=(5)
右移1就等於000010(2)
N%2==1 -> N&1
例如000101=(5)
就會是
000101
&000001
-----------
000001
等於1
可以用位元運算子會比較快
N/2 - > N>>1右移
例如000101=(5)
右移1就等於000010(2)
N%2==1 -> N&1
例如000101=(5)
就會是
000101
&000001
-----------
000001
等於1
照你的改完再換成 scanf printf 就過了😁