多项式求和
Time Limit: 1000MS
Memory Limit: 65536KB
Problem Description
多项式描述如下:
1 - 1/2 + 1/3 - 1/4 + 1/5 - 1/6 ……
先请你求出多项式前n项的和。
Input
第一行输入一个数T代表测试数据个数(T<=1000)。接下来T行每行1个数代表n(0<=n< 2^31)。
Output
对于每个输入样例,输出多项式和的结果(结果精确到小数点后两位)。每行输出一个结果。
Example Input
2 1 2
Example Output
1.00 0.50
代码:
01 | #include <stdio.h> |
02 | #include <stdlib.h> |
03 |
04 | int main() |
05 | { |
06 | int N; |
07 | scanf ( "%d" ,&N); |
08 | while (N--) |
09 | { |
10 | int m,i; |
11 | double s = 0,n; |
12 | scanf ( "%d" ,&m); |
13 | if (m>300) m = 300; //因为1/m太小了,以至于可以忽略不计,所以可以给m加一个限制条件,来减少计算次数!!!!要不然会超时 |
14 | if (m==0) |
15 | printf ( "0\n" ); |
16 | else |
17 | { |
18 | for (i = 1;i<=m;i++) |
19 | { |
20 | n = 1.0/i; |
21 | s = s+n; |
22 | if (i<m) |
23 | { |
24 | i = i+1; |
25 | n = 1.0/i; |
26 | s = s-n; |
27 | } |
28 |
29 | } |
30 | printf ( "%.2lf\n" ,s); |
31 |
32 | } |
33 |
34 |
35 | } |
36 | return 0; |
37 | } |
38 |
39 |