您的位置:首页 > 大数据 > 人工智能

2016 Multi-University Training Contest 3 1001 Sqrt Bo (模拟)

2016-08-01 09:37 411 查看
题目链接

简单题意

给出一个数,如果能在5次以内的开方并向下取整后变为一,则输出操作次数,否则输出“TAT”

思路

很明显,不同次数的操作变成一的数是有上下界的,找出来,然后直接和输入比较就可以了,注意5次操作的上界恰好是int的上界,所以最好用longlong。

代码

#include <bits/stdc++.h>

using namespace std;
long long lim[10] = {0,4,16,256,65536,4294967296};

string str;
int main(){
while(cin >> str){
if(str.length() > 10) {puts("TAT");continue;}
long long tmp = atoll(str.c_str());
if(tmp >= lim[5]) {puts("TAT");continue;}
int ans = 0;
if(tmp == 0 ){puts("TAT");continue;}
for(int i = 0 ; i < 5 ; i ++){
if(tmp >= lim[i])
ans = i+1;
}
printf("%d\n",ans);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: