CSUFT OJ 1141: Real Big Water Problem
Time Limit: 1 Sec |
|
Memory Limit: 128 MB |
Submit: 22 |
|
Solved: 5 |
Description
If you have solved the small water problem,let's see this big one.If you don't,I suggest you ignore this problem!
Also give you a positive integer n.
Function F(x) satisfies:
F(0) = cos(n)
F(x) = cos(F(x-1)) (x>0)
Calculate F(n).
Input
The input contains no more than 20 test cases.
For each test case,the only line consists of one integer n.
0<=n<=10^30.
Output
For each given n,print the answer in a single line.The result should be rounded to six decimal places.
Sample Input
0
1
2
Sample Output
1.000000
0.857553
0.610065
第一次的代码出现了超时问题,马一下:
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <stdlib.h> using namespace std; int main() { //freopen("in.txt", "r", stdin); char a[100]; while(scanf("%s", a) != EOF) { int shuzi=atoi(a); if(shuzi<=50) { double x; x = cos(shuzi); while(shuzi--) x = cos(x); printf("%.6lf\n", x); } else printf("0.739085\n"); } return 0; }
第二次改动了一下,就好了:
#include <iostream> #include <cstdio> #include <cmath> #include <cstring> #include <cstdlib> using namespace std; int main() { //freopen("in.txt", "r", stdin); char a[100]; while(scanf("%s", a) != EOF) { if(strlen(a) <= 3) { int shuzi=atoi(a); double x; x = cos(shuzi); while(shuzi--) x = cos(x); printf("%.6lf\n", x); } else printf("0.739085\n"); } return 0; }
如果直接将存储着特大数字的字符串转换会导致超时问题,这是对我来说容易忽略有重要的一点。