Description
众所周知,paulzhou的数学不太好。现在他有一个问题,希望你帮他解答:
定义,求最小的正整数y使得
,其中
Input
第一行输入一个整数T(T<=10),表示测试实例的数量;
每组用例输入一个非负整数n(n<10^100)
Output
对于每组用例,如果y<=5则输出y,否则输出“TAT”
Sample Input
2
233
233333333333333333333333333333333333333333333333333333333
Sample Output
3
TAT
Hint
题意
题解:
2√=1.4143√=1.732 又因为向下取整 所以最大一定小于232或332 最大也是小于long long 所以判断长度小于long long
直接转换成整数 计算即可
AC代码
#include <cstdio>
#include <cmath>
#include <cstring>
#include <algorithm>
using namespace std;
typedef long long ll;
int main(){
int t;
scanf("%d",&t);
while (t--){
char st[110];
scanf("%s",st);
int len = strlen(st);
if (len > 16) puts("TAT");
else {
ll temp = 0;
for (int i = 0; i < len; ++i){
temp = temp*10+st[i]-'0';
}
int ans = 0;
while (ans<6){
temp = sqrt(temp);
ans++;
if (temp == 1) break;
}
if (temp == 1) printf("%d\n",ans);
else puts("TAT");
}
}
return 0;
}