HDU 5752 Sqrt Bo (思维题) 2016杭电多校联合第三场

题目:传送门

题意:一个很大的数n,最多开5次根号,问开几次根号可以得到1,如果5次还不能得到1就输出TAT。

题解:打表题,x1=1x2=(x1+1)*(x1+1)-1以此类推。x5是不超过long long的,判断输出即可。

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
using namespace std;
typedef long long ll;
char c[1005];
int main()
{
    while(cin>>c)
    {
        int len=strlen(c);
        if(len>=15)
        {
            printf("TAT\n");
        }
        else
        {
            ll n=c[0]-'0';
            ll maxx=4294967295;
            for(int i=1;i<len;i++)
            n=n*10+c[i]-'0';
            if(n==0)
            printf("TAT\n");
            else if(n==1)
            printf("0\n");
            else if(n<=3)
            printf("1\n");
            else if(n<=15)
            printf("2\n");
            else if(n<=255)
            printf("3\n");
            else if(n<=65535)
            printf("4\n");
            else if(n<=maxx)
            printf("5\n");
            else
            printf("TAT\n");
        }
    }

    return 0;
}

 

posted @ 2016-08-08 20:05  Ritchie丶  阅读(185)  评论(0编辑  收藏  举报