问题描述
运行程序后得到的输出:
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;
}