计算1/n!的数列之和

时间:2022-06-07 15:47:24

编写程序,输入一个正整数n,求下列算式的值。要求定义和调用函数fact(k)计算k的阶乘,函数返回值的类型是double。

1+1/2!+ …. +1/n!

输出保留5位小数。

下面是一些合理的表达式的例子:

Input 5

Output 1.71667

代码:

package 华为机试题;

/**
* @author Hutongling
*
* @time:2017年4月9日 下午1:43:08
*/

public class 数列求和 {

static int[] jieCheng(int n){
if(n==0){
int result[]={1};
return result;
}
else {
int result[]=new int[n+1];
result[0]=1;
for(int i=1;i<=n;i++)
result[i]=result[i-1] * i;
return result;
}
}

static double sumOfNumbers(int n){
double sum=0;
int result[]=jieCheng(n);
for(int i=1;i<=n;i++)
if((double)1/result[i]>0.00000000000000001)
sum+=(double)((double)1/result[i]);
else
break;
return sum;
}
public static void main(String[] args) {
System.out.printf("%.5f\n",sumOfNumbers(5));
System.out.printf("%.5f\n",sumOfNumbers(15));
}

}

代码结果:
1.71667
1.71828

注意:代码中并未考虑大数问题,如果考虑大数问题的话情况可以使用BigInteger。
另外,代码中考虑到double精度的问题,当(double)1/result[i]<0.00000000000000001的时候double已经无法表示,所以,就直接退出了