HDU5752 Sqrt Bo(2016多校训练)

it2022-05-05  63

Sqrt Bo

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others)Total Submission(s): 1173    Accepted Submission(s): 528

Problem Description   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(fy1(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.  

 

Input   This problem has multi test cases(no more than 120 ). Each test case contains a non-negative integer n(n<10100) .  

 

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

 

Sample Input   233 233333333333333333333333333333333333333333333333333333333  

 

Sample Output   3 TAT   题意:给出一个字符串,若开五次根号能开到1,则输出开方次数,否则输出“TAT”。   1 #include <iostream> 2 #include <cstdio> 3 #include <algorithm> 4 #include <cstring> 5 #include <string> 6 using namespace std; 7 typedef long long ll; 8 typedef unsigned long long ull; 9 typedef long double ld; 10 11 int main() 12 { 13 char str[1000]; 14 ll i,len; 15 ll n = 0,ans = 0; 16 while(~scanf("%s",str)) 17 { 18 len = strlen(str); 19 if(len>10) 20 { 21 i = 0; 22 } 23 else 24 { 25 i = 1; 26 for(int j = 0; str[j] && j < 11; j++) 27 n = n*10 + str[j]-'0'; 28 //cout << n << endl; 29 while(n != 1) 30 { 31 n = (long long)sqrt((double)n); 32 ans++; 33 if(ans > 5) 34 break; 35 } 36 } 37 n = 0; 38 //cout << i << ' ' << ans << endl; 39 if(i && ans <= 5) 40 cout << ans << endl; 41 else 42 cout << "TAT\n"; 43 ans = 0; 44 i = 0; 45 } 46 return 0; 47 } View Code

 

转载于:https://www.cnblogs.com/Mino521/p/5727728.html


最新回复(0)