链接:https://ac.nowcoder.com/acm/contest/9680/H
来源:牛客网
从前有一个数字 1,它每天要么 +1,要么 *2
现在它变成了 n,请问它最少用了几天变成 n
输入描述:
题目包含多组测试数据,请处理到文件结束。每组输入一行表示一个 N(1≤N≤109)N(1 leq N leq 10^9)N(1≤N≤109),代表最终的钱数。保证测试数据的个数不超过 10510 ^ 5105。
输出描述;
对于每个输入,输出一行一个整数表示答案
这个题目是倒着考虑的,就是把n->1需要几步
#include<iostream> #include<algorithm> using namespace std; typedef long long ll; const int maxn=4e5+100; ll a[maxn]; ll n; int cnt=1; int main(){ while(cin>>n){ int ans=0; while(n!=1){ if(n&1){ n--; } else{ n/=2; } ans++; } cout<<ans<<endl; } }