题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5752
题目:
Problem Description
Let's define the function
f(n)=⌊n−−√⌋
.
Bo wanted to know the minimum number y which satisfies fy(n)=1 .
note: f1(n)=f(n),fy(n)=f(fy−1(n))
It is a pity that Bo can only use 1 unit of time to calculate this function each time.
And Bo is impatient, he cannot stand waiting for longer than 5 units of time.
So Bo wants to know if he can solve this problem in 5 units of time.
Bo wanted to know the minimum number y which satisfies fy(n)=1 .
note: f1(n)=f(n),fy(n)=f(fy−1(n))
It is a pity that Bo can only use 1 unit of time to calculate this function each time.
And Bo is impatient, he cannot stand waiting for longer than 5 units of time.
So Bo wants to know if he can solve this problem in 5 units of time.
Input
This problem has multi test cases(no more than
120
).
Each test case contains a non-negative integer n(n<10100) .
Each test case contains a non-negative integer n(n<10100) .
Output
For each test case print a integer - the answer
y
or a string "TAT" - Bo can't solve this problem.
Sample Input
233 233333333333333333333333333333333333333333333333333333333
手动判断一下。注意为0的情况。
#include <iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#define ll long long
using namespace std;
int main()
{
char s[1100];
while(~scanf("%s",s))
{
int len=strlen(s);
if(len==1&&s[0]=='0')
{
cout<<"TAT"<<endl;
continue;
}
if(len<=10)
{
ll num=0;
for(int i=0;i<len;i++)
{
num=num*10+(ll)(s[i]-'0');
}
if(num<2) cout<<0<<endl;
else if(num<4) cout<<1<<endl;
else if(num<16) cout<<2<<endl;
else if(num<256) cout<<3<<endl;
else if(num<65536) cout<<4<<endl;
else if(num<4294967296) cout<<5<<endl;
else cout<<"TAT"<<endl;
}
else cout<<"TAT"<<endl;
}
}