Reputation: 3
I have a simple java program calculating the factorial of a number.
Output I get after running the program:
the factorial of 5 is 120
However I would like to generate output looking like this:
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;
}
Upvotes: 0
Views: 394
Reputation: 34
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;
}
or, if you prefer 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;
}
Upvotes: 0
Reputation: 365
Static way: Create your string in you function (this does not operate with n < 0) :
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();
}
Object oriented way: You can also create a Factorial class if you know about object oriented in Java (this does not operate with n < 0) :
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();
}
}
Then you can use a System.out.println(new Factorial(n));
to print the result
Upvotes: 1
Reputation: 18245
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;
}
Upvotes: 2