您的位置:首页 > 其它

杭电5752之Sqrt Bo

2016-07-26 17:04 363 查看
[align=left]Problem Description[/align]
Let's define the function
f(n)=⌊n−√⌋.

Bo wanted to know the minimum number y
which satisfies fy(n)=1.

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

[align=left]Input[/align]
This problem has multi test cases(no more than
120).

Each test case contains a non-negative integer n(n<10100).
 

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

[align=left]Sample Input[/align]

233
233333333333333333333333333333333333333333333333333333333

 

[align=left]Sample Output[/align]

3
TAT

分析:判断一个数开根号几次之后等于1,次数不超过5次,有则输出次数,否则输出TAT

AC代码如下:

#include"stdio.h"
#include"string.h"
#include"math.h"
int main()
{
char a[110];
long long sum;
while (scanf("%s",a)!=EOF)
{
sum=0;
int s=strlen(a);
if (s>=11)//4294967296连续开方,开5次之后等于2,该数为上限,只有10位,故大于11位的,输出TAT
{
printf("TAT\n");
continue;
}
for (int i=0;i<s;i++)
{
sum+=(a[i]-48)*pow(10,s-1-i);
}
if (sum>=4294967296||sum==0)//4294967296连续开方,开5次之后等于2,如果该数所用次数大于5,或者该数为0
{
printf("TAT\n");
continue;
}
int count=0;
while (sum>1)
{
count++;
sum=sqrt(sum);
}
printf("%d\n",count);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: