简单题意
给出一个数,如果能在5次以内的开方并向下取整后变为一,则输出操作次数,否则输出“TAT”
思路
很明显,不同次数的操作变成一的数是有上下界的,找出来,然后直接和输入比较就可以了,注意5次操作的上界恰好是int的上界,所以最好用longlong。
代码
#include <bits/stdc++.h>
using namespace std;
long long lim[10] = {0,4,16,256,65536,4294967296};
string str;
int main(){
while(cin >> str){
if(str.length() > 10) {puts("TAT");continue;}
long long tmp = atoll(str.c_str());
if(tmp >= lim[5]) {puts("TAT");continue;}
int ans = 0;
if(tmp == 0 ){puts("TAT");continue;}
for(int i = 0 ; i < 5 ; i ++){
if(tmp >= lim[i])
ans = i+1;
}
printf("%d\n",ans);
}
}