显示整个计算以获取数字的阶乘java

问题描述

我有一个简单的Java程序来计算数字的阶乘。

运行程序后得到的输出

5的阶乘是120

但是我想生成如下输出

5 * 4 * 3 * 2 * 1 = 120

public static int calculateFactorial(int numInput) {
    
    int factorial = 1;
    
    for (int i = 1; i <= numInput; i++) {
    factorial = factorial *i;
    }
    
    return factorial;
}

解决方法

public static String calculateFactorialStr(int val) {
    String res = IntStream.range(0,val)
                          .map(i -> val - i)
                          .mapToObj(String::valueOf)
                          .collect(Collectors.joining(" * "));
    return res + " = " + calculateFactorial(val);
}

public static long calculateFactorial(int val) {
    long res = 1;

    for (int i = 2; i <= val; i++)
        res *= i;

    return res;
}
,

静态方式: 在函数中创建字符串(对n

public static String calculateFactorial(int numInput) {
        StringBuilder res = new StringBuilder();
        int factorial = 1;

        for (int i = 1; i <= numInput; i++) {

            res.append(String.valueOf(i));
            if (i != numInput) {
                res.append(" * ");
            }
            factorial = factorial *i;
        }
        res.append(" = ").append(factorial);

        return res.toString();
}

面向对象的方式: 如果您了解Java面向对象的知识,那么也可以创建一个Factorial类(对n

import java.util.ArrayList;
import java.util.List;

public class Factorial {
    private int number;
    private int result;

    public Factorial(int numInput) {
        number = numInput;
        int factorial = 1;

        for (int i = 1; i <= numInput; i++) {
            factorial = factorial * i;
        }
        result = factorial;
    }

    @Override
    public String toString() {
        StringBuilder res = new StringBuilder();
        for (int i = 0; i <= number; i++) {

            res.append(i);
            if (i != number) {
                res.append(" * ");
            }
        }
        res.append(" = " + result);

        return res.toString();
    }
}


然后您可以使用System.out.println(new Factorial(n));打印结果

,
public static String calculateFactorial(int numInput) {
    int factorial = 1;
    String calc = "";

    for (int i = 1; i <= numInput; i++) {
      if (i != 1) {
        calc += " * ";
      }
    calc += i;
    factorial = factorial * i;
    }
    calc += " = " + factorial;
    return calc;
}

或者,如果您喜欢x *(x-1)* ... * 1

  public static String calculateFactorial(int numInput) {
    
    int factorial = 1;
    String calc = "";

    for (int i = numInput; i > 0; i--) {
      if (i != numInput) {
        calc += " * ";
      }
    calc += i;
    factorial = factorial * i;
    }
    calc += " = " + factorial;
    return calc;
}