题解 | 小数字
小数字
https://www.nowcoder.com/practice/faaaa4ddadb34bae88b37fcb635654f1
#include <cmath> #include <iostream> using namespace std; int qmi(int a,int b){ int res = 1; while(b){ if(b&1){ res = res*a; } b>>=1; a*=a; } return res; } int main() { int t;cin>>t; while(t--){ int n,m;cin>>n>>m; int res2 = n-m; int res3 = n/2; int res1 = qmi(2,m); for(int i = 1;i<=m;i++){ if(n>=10){ n = ceil(sqrt(n)); } else if(n>=3){ int res2 = n-1; int res3 = (n+1)/2; int res1 = ceil(sqrt(n)); n = min(res1,min(res2,res3)); } else{ n = n-(m-i+1); break; } } cout<<n<<'\n'; } return 0; } // 64 位输出请用 printf("%lld")
就是考虑根号n和2分之n和n-1的大小关系,在n小于0时只有n-1只能使n减小,选择一个范围,由于根号n下降速度快,所以优先使用根号。
活动地址https://www.nowcoder.com/discuss/726480854079250432
#牛客春招刷题训练营#