如何在Java中创建阶乘及其说明

如何在Java中创建阶乘及其说明,java,factorial,Java,Factorial,问候互联网上的人们 我是Java的新手。我有一个关于创建阶乘的问题 我能够创建一个只显示结果的阶乘。我这里有语法: import java.util.Scanner; public class DynamicFact { public static void main(String[] args){ Scanner sc = new Scanner(System.in); int anc = 1; double fact = 1; System.out.pri

问候互联网上的人们

我是Java的新手。我有一个关于创建阶乘的问题

我能够创建一个只显示结果的阶乘。我这里有语法:

import java.util.Scanner;

public class DynamicFact {
public static void main(String[] args){

    Scanner sc = new Scanner(System.in);
    int anc = 1;
    double fact = 1;
    System.out.println("Enter your number : ");
    int num = sc.nextInt();

    if (num < 0) {
        System.out.println("Your number is not valid. Please enter another number.");
    } else {
        for (anc = 1; anc <= num; anc++) {
            fact = fact * anc;
        }
        System.out.println("Factorial " + num + " is = " + fact );
    }

}
}
import java.util.Scanner;
公共类动态行为{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int anc=1;
双重事实=1;
System.out.println(“输入您的号码:”);
int num=sc.nextInt();
if(num<0){
System.out.println(“您的号码无效,请输入另一个号码。”);
}否则{

对于(anc=1;anc使用StringBuilder在运行时构建算术表达式:

} else {
    StringBuilder sb = new StringBuilder();
    for (anc = 1; anc <= num; anc++) {
        if(anc > 1)sb.append(" * ");
        sb.append(anc);
        fact = fact * anc;
    }
    sb.append(" = ").append(fact);
    System.out.println("Factorial " + num + " is " + sb);
}
}其他{
StringBuilder sb=新的StringBuilder();
对于(anc=1;anc 1)sb.附加(“*”);
某人(非国大);
事实=事实*anc;
}
附加(事实);
System.out.println(“阶乘”+num+“是”+sb);
}

您可以使用的简单解决方案:

String result = "", separator = "";
for (anc = 1; anc <= num; anc++) {
    fact = fact * anc;
    result = anc + separator + result;
    separator = " * ";
}
System.out.println("Factorial " + num + " is " + result + " = " + fact);
字符串结果=”,分隔符=”;
对于(anc=1;anc
import java.util.Scanner;
公开课考试{
公共静态void main(字符串[]args){
扫描仪sc=新的扫描仪(System.in);
int anc=1;
双重事实=1;
StringBuffer结果=新的StringBuffer();
System.out.println(“输入您的号码:”);
int num=sc.nextInt();
if(num<0){
System.out.println(“您的号码无效,请输入另一个号码。”);
}否则{

对于(anc=1;anc提示:查看
StringBuilder
(与问题无关)“您的号码无效。请输入其他号码。”-假设您是一个不知道代码的用户。您会问什么?实际上,要从问题中获得准确的输出,您必须从
num
向下到1,而不是从1到
num
。您可以使用
sb.insert(0,
。出于某种原因,Java BOD没有在
StringBuilder
@Bathsheba上包含
prepend
方法一种可能性,是的。但就我个人而言,我发现遵循输出顺序更符合逻辑。而且这还不如更改for(哇,几乎破坏了练习…)@Bathsheba原因可能是时间复杂度令人震惊。毕竟StringBuilder是基于数组的。
import java.util.Scanner;
public class test {
public static void main(String[] args){

    Scanner sc = new Scanner(System.in);
    int anc = 1;
    double fact = 1;

    StringBuffer result = new StringBuffer();
    System.out.println("Enter your number : ");
    int num = sc.nextInt();

    if (num < 0) {
        System.out.println("Your number is not valid. Please enter another number.");
    } else {
        for (anc = 1; anc <= num; anc++) {
            fact = fact * anc;
            result.insert(0,Integer.toString(anc)+"*");
        }

        System.out.println("Factorial " + num + " is = " + fact );
        System.out.println(result.substring(0,result.length()-1));
    }

}
}