杭电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;
}
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;
}
相关文章推荐
- Java 集合体系详解——List体系有序集合
- skb->truesize,len,datalen,size,等的区别
- 安全标准
- Head First Java笔记(九)
- 数据库连接池
- URAL 1119 Metro (动态规划)
- Centos端口转发
- typedef和define的区别以及枚举和#define的区别
- 分页技术
- js常用功能汇总
- 基于LC push的浏览器桌面提醒快速集成方案
- 学习笔记:B树建立,搜索和删除操作
- HTTP的get_post请求方法
- (ros/navigation/gmapping)导航/建地图
- iOS获取当天0点时间
- PHP 魔术方法之 __call 与 __callStatic
- intellj idea15下 新建 Maven 项目
- 归并排序与快速排序
- 巧用js替换某些不能替换的文字
- Android 应用的欢迎界面实现代码