题目描述
首先定义一个父类计算如下表达式:S=1+1/2!+1/3!+……+1/n!
然后,利用继承机制定义一个子类计算如下表达式:
S=x+x/2!+x/3!+……+x/n!
利用继承机制再定义一个子类计算如下表达式:
S=1+1/(2!*x)+1/(3!*x)+……+1/(n!*x)
定义主类,类名mainClass,在类中定义main方法,测试以上几个成员方法
思路
- 定义父类是calculate,还有它的两个派生类calculate_mul_x(乘)以及calculate_div_x(除)
- 只要计算出1/1!+1/2!+1/3!±-----+1/n!,那么它的两个派生计算结果就很容易得到,乘以x或者除以x就行了
- 计算阶乘和,另f [ n ] = 1 / n! ,那么f [ n ] = f [ n - 1 ] / n 所以只要循环 temp*=i;
sum+=1.0/temp;
这两个语句就行了,temp初始值为1
代码实例
package demoTest;
/*
@Author:HwSir
@DateTime:2022/8/18 21:12
@Motto:我所生活的,便是我所热爱的!
@Motto:纵使疾风起,人生不言弃!
*/
/*
首先定义一个父类计算如下表达式:S=1+1/2!+1/3!+…..+1/n!
然后,利用继承机制定义一个子类计算如下表达式:
S=x+x/2!+x/3!+…..+x/n!
利用继承机制再定义一个子类计算如下表达式:
S=1+1/(2!*x)+1/(3!*x)+…..+1/(n!*x)
定义主类,类名mainClass,在类中定义main方法,测试以上几个成员方法
*/
class calculate{
private double sum=0;
public double getSum(int n){
int temp=1;
for(int i=1;i<=n;i++){
temp*=i;
sum+=1.0/temp;
}
return sum;
}
}
class calculate_mul_x extends calculate{
public double getSum(int n,int x){
return super.getSum(n)*x;
}
}
class calculate_div_x extends calculate{
public double getSum(int n,int x){
return super.getSum(n);
}
}
public class mainClass {
public static void main(String[] args) {
//测试用例
calculate c1=new calculate();
System.out.println(c1.getSum(2));
calculate_mul_x c2=new calculate_mul_x();
System.out.println(c2.getSum(10,10));
calculate_div_x c3=new calculate_div_x();
System.out.println(c3.getSum(10,10));
}
}
如有错误,敬请指正