Sqrt Bo
Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 5 Accepted Submission(s): 5
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
Sample Output
3 TAT
水题;
问一个数最少开几次根后值为1,每次开根向下取证
超过5次输出TAT 否则输出最少次数
#include<cstdio>
#include<iostream>
#include<cstring>
#include<queue>
#include<cmath>
using namespace std;
char ch[110];
long long i;
const long long num=4294967296-1;
int main()
{
while(~scanf("%s",ch))
{
int r=strlen(ch);
int l=0;
while(ch[l]=='0') l++;
if(r-l>10)
{
printf("TAT\n");
continue ;
}
i=0;
while(l<r)
{
i=i*10+(ch[l]-'0');
l++;
}
//cout<<i<<endl;
if(i>num||i==0)
{
printf("TAT\n");
}
else
{
int ii=0;
while(i!=1)
{
i=(long long )sqrt(i);
//cout<<i<<endl;
ii++;
}
printf("%d\n",ii);
}
}
}