import java.util.*;
class Factorial{
void factNum(int n){
int fact=1;
ArrayList<Integer> al=new ArrayList<Integer>();
for(int i=1;fact<=n;i++){
fact=fact*i;
al.add(i);
if(fact==n){
for(int j:al){
System.out.print(+j);
}}
}
}
public static void main(String args[]){
Scanner scan=new Scanner(System.in);
Factorial f=new Factorial();
System.out.println("Enter the Integer");
int num=scan.nextInt();
f.factNum(num);
}
}
我编写了这段代码,这样当我输入24号因子时我会得到1 2 3 4作为输出,当我输入23时我应该输出为false。我的代码几乎是正确的,但问题是,当我输入不属于阶乘系列的数字时,我没有得到False作为输出。请任何人都可以帮助我在这段代码中我可以保留System.out.print(&#34; False&#34;);言。
答案 0 :(得分:2)
你不是在任何地方打印“False”。保持一个布尔标志来检查给定的数字是否是阶乘的,并相应地打印。
void factNum(int n){
int fact=1;
boolean flag = true;
ArrayList<Integer> al=new ArrayList<Integer>();
for(int i=1;fact<=n;i++){
fact=fact*i;
al.add(i);
if(fact==n){
flag = false;//if factorial then make it false
for(int j:al){
System.out.print(+j);
}}
}
if(flag)
System.out.println("False");
}
答案 1 :(得分:1)
您可以使用下面代码中所示的标记值来跟踪数字是否为阶乘的条件。
public static void factNum(int n) {
int fact = 1;
ArrayList<Integer> al = new ArrayList<Integer>();
boolean flag = false;
for (int i = 1; fact <= n; i++) {
fact = fact * i;
al.add(i);
if (fact == n) {
flag = true;
for (int j : al) {
System.out.print(+j);
}
}
}
if(!flag)
System.out.println("false");
}
答案 2 :(得分:0)
试试这段代码。
void factNum(int n) {
int fact = 1;
ArrayList<Integer> al = new ArrayList<Integer>();
int check = 0;
for (int i = 1; fact <= n; i++) {
fact = fact * i;
al.add(i);
if (fact == n) {
for (int j : al) {
System.out.print(+j);
check = 1;
}
}
else if (fact>n && check == 0)
{
System.out.println("False");
}
}
}