HDU 5752 Sqrt Bo (思维题) 2016杭电多校联合第三场
题目:传送门。
题意:一个很大的数n,最多开5次根号,问开几次根号可以得到1,如果5次还不能得到1就输出TAT。
题解:打表题,x1=1,x2=(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; }