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;
}
如果直接将存储着特大数字的字符串转换会导致超时问题,这是对我来说容易忽略有重要的一点。