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
");
        }
        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
");
            else if(n==1)
            printf("0
");
            else if(n<=3)
            printf("1
");
            else if(n<=15)
            printf("2
");
            else if(n<=255)
            printf("3
");
            else if(n<=65535)
            printf("4
");
            else if(n<=maxx)
            printf("5
");
            else
            printf("TAT
");
        }
    }

    return 0;
}
原文地址:https://www.cnblogs.com/Ritchie/p/5750771.html