hdu 5752 Sqrt Bo(2016 Multi-University Training Contest 3——水题)

来源:互联网 发布:打考勤软件 编辑:程序博客网 时间:2024/05/25 01:36

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5752

Sqrt Bo

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)
Total Submission(s): 4    Accepted Submission(s): 4


Problem Description
Let's define the function f(n
Bo wanted to know the minimum number y which satisfies fy(n)=1.

note:f1(n)=f(n),fy(n)=f(fy1(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).
 

Output
For each test case print a integer - the answer y or a string "TAT" - Bo can't solve this problem.
 

Sample Input
233233333333333333333333333333333333333333333333333333333333
 

Sample Output
3TAT
 

Source
2016 Multi-University Training Contest 3
 
题目大意:开根号五次以内能不能得到1,每次开根号都向下取整。
解题思路:
判断一下最大值,超过最大值就输出。否则开根号开根号~~~~

详见代码。
#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);        }    }}


0 0
原创粉丝点击