题目
思路
其实这是一个数学题目。。并不需要使用递归求解。
其实在数学中每个数都能表示成2的幂总和
比如
127=20+21+22+23+24+25+26
59=25+24+23+21+20
那么对于这个题目,由于序列是从1-n的,也就是说把1-n的所有数都表示成2的幂次,那么就可以每次对应的减去相同的2的幂数即可。到最后的话也是求最大的2的幂次。
由于某个数x,一定存在正整数n满足2n≤x≤2n+!,很显然是个以2为底的对数的关系。
所以代码就很简单,直接打印出(int)log2n+1即可。因为有个20所以要加1
AC代码
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
cin >> n;
cout << (int)log2(n) + 1;
}
后言
其实,有时候无厘头的问题都可以很巧妙的转换成数学问题,比如此题又学到了 在数学中每个数都能表示成2的幂总和