子序列的和(subsequence)
输入两个正整数n<m<10^6,输出,保留5位小数。例如 n = 2, m = 4时答案是0.42361;n = 65536,m = 655360时答案为0.00001。
注意:本题有陷阱。
1 #include <stdio.h>
2
3 int
4 main()
5 {
6 int m = 0;
7 int n = 0;
8 int i = 0;
9
10 double sum = 0;
11
12 scanf("%d%d", &n, &m);
13
14 for (i = 0; n + i <= m; i++)
15 {
16 sum += 1 / (((double)n + i) * ((double)n + i));
17 }
18 printf("%.5lf\n", sum);
19 return 0;
20 }
题目中注意本题有陷阱,陷阱是sum += 1 / (((double)n + i) * ((double)n + i));
在n较大时,((double)n + i) * ((double)n + i)会溢出,所以应该改成 1 / ((double)n + i) / ((double)n + i)。