java - 系列代

标签 java series factorial

我正在尝试找出系列的总和,1/2! - 2/3! + 3/4! - 4/5! ... 名词。抱歉,这听起来很尴尬,但总和始终显示为 0.0。我不知道发生了什么,我才刚刚开始。任何人都可以指出错误并建议如何解决吗?谢谢!

import java.util.Scanner;
public class Series {
    /*
     * Series design: 1/2! - 2/3! + 3/4! - 4/5! .. n 
    */
    static double sum = 0; static int n;
    Scanner sc = new Scanner(System.in);
    public static int fact(int n){
        int fact = 1; 
        for (int i = 1; i<=n; i++){
            fact *= i;
        }
        return fact;
    }
    void generate(){
        double sign = 1.0; double term;
        for (int i = 1; i<=n; i++){
            term = i/fact(i+1) * sign;
            sum += term;
            sign *= -1;
        }
    }
    void accept(){
        System.out.println("Enter the value of n:");
        n = sc.nextInt(); 
    }
    public static void main(String[] args){
        Series o = new Series();
        o.accept();
        o.generate();
        System.out.println("The sum of the series is: " +sum);
    }
}

最佳答案

ifact(i+1)都是int s,所以你正在表演 integer division .自 i < fact(i+1) ,每个这样的术语都会产生一个零。

您对 sign 的定义是正确的作为double , 但自 /*具有相同的优先级,您首先执行整数除法,然后才乘以双 sign .将它移到表达式的开头应该可以解决问题:

void generate(){
    double sign = 1.0; double term;
    for (int i = 1; i<=n; i++){
        term = (sign * i) / fact(i+1);
        sum += term;
        sign *= -1;
    }
}

关于java - 系列代,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28791111/

相关文章:

java - Jersey 及附加数据进行json回复,无需修改实体类

wpf - 更改 WPFToolkit 图表控件的默认颜色

python - 如何转发/填充 Pandas DataFrame 列/系列中的特定值?

python - 如何根据列中的条件进行计算?

javascript - 使用 Javascript 数组对数字进行阶乘

python - 为什么我计算数字阶乘的算法的时间复杂度是 O(n^2) 而不是预期的 O(n)?

java - 如何在 JAVA Netbeans 中使用 JComboBox 将记录 ID 而不是 Varchar 插入到我的 MySql

java - log4j错误日志中面临的问题和异常处理

java - Jackson hibernate 模块 - 渴望特定请求

ruby - 给定数字的阶乘中尾随零的数量 - Ruby