Java 仅使用一个while循环执行阶乘
我试图找到9到0的阶乘,只使用一个while循环,但我的想法不是输出一个值 我通过两个while循环找到了解决方法:Java 仅使用一个while循环执行阶乘,java,math,factorial,Java,Math,Factorial,我试图找到9到0的阶乘,只使用一个while循环,但我的想法不是输出一个值 我通过两个while循环找到了解决方法: int i; count = 9; while (count >= 0){ value = count; i = count-1; while (i > 0){ value = value * i; i--; } Sy
int i;
count = 9;
while (count >= 0){
value = count;
i = count-1;
while (i > 0){
value = value * i;
i--;
}
System.out.print(value + ", ");
}
这是可行的,但我尝试将其更改为仅使用一个while循环,并得到以下结果:
int i;
for (count = 9; count < 0; count--){
value = count;
i = count-1;
while (i > 0){
value = value * i;
i--;
}
System.out.print(value + ", ");
}
我不完全确定我是否正确地使用了for语句,但我认为我是正确的,或者至少我认为它应该输出一些东西,以便我可以调试它
谁能给我一个正确方向的提示吗
count = 9;
sum=1;
while (count >= 1){
sum*=count;
--count;
}
System.out.print(sum);
它会给你9分=362880
它会给你9分=362880只需首先分配value=i,然后运行循环。您只能通过while循环获得阶乘 重要提示:因为n=n*n-1!,因此,i-必须在value=value*i之前执行 更新:如果您想计算0到9的阶乘,那么使用以下代码:它还包括0的阶乘
public static void main(String args[]){
int countLowest=0;
int countHighest=9;
int value=1;
while (countLowest<= countHighest){
if(countLowest==0)
value = value * (countLowest+1);
else
value=value*countLowest;
countLowest++;
System.out.println("Factorial of "+(countLowest-1)+" is "+value);
}
}
只需首先指定value=i,然后运行循环。您只能通过while循环获得阶乘 重要提示:因为n=n*n-1!,因此,i-必须在value=value*i之前执行 更新:如果您想计算0到9的阶乘,那么使用以下代码:它还包括0的阶乘
public static void main(String args[]){
int countLowest=0;
int countHighest=9;
int value=1;
while (countLowest<= countHighest){
if(countLowest==0)
value = value * (countLowest+1);
else
value=value*countLowest;
countLowest++;
System.out.println("Factorial of "+(countLowest-1)+" is "+value);
}
}
这将给出从9到1的所有阶乘:
int i=1;
int value=1;
String res = "";
while (i <= 9){
value = value * i;
res = value + ((i>1)?",":"") + res;
i++;
}
System.out.print(res);
也许这是作弊,因为我是从1开始按升序计算阶乘的!到9点!,但是为了得到所需的结果,我颠倒了输出的顺序
编辑:
如果你也想要0!要打印,一个小的变化可以做到:
int i=1;
int value=1;
String res = "";
while (i <= 10){
res = value + ((i>1)?",":"") + res;
value = value * i;
i++;
}
System.out.print(res);
这将给出从9到1的所有阶乘:
int i=1;
int value=1;
String res = "";
while (i <= 9){
value = value * i;
res = value + ((i>1)?",":"") + res;
i++;
}
System.out.print(res);
也许这是作弊,因为我是从1开始按升序计算阶乘的!到9点!,但是为了得到所需的结果,我颠倒了输出的顺序
编辑:
如果你也想要0!要打印,一个小的变化可以做到:
int i=1;
int value=1;
String res = "";
while (i <= 10){
res = value + ((i>1)?",":"") + res;
value = value * i;
i++;
}
System.out.print(res);
首先,第二个循环不起作用的原因是for中的条件错误。中间的条件是使循环继续,而不是停止。你刚才说的是从9开始,在数字小于0时工作。当然,你的数字一开始就大于零 其次,我认为使用for循环有点作弊,因为for循环只是while循环的一个特例 现在来谈谈阶乘本身的问题。你知道一个阶乘n!定义为n-1*n 计算一个特定阶乘的基本循环是:
int n = 5;
int factorial = 1;
while ( n > 0 ) {
factorial *= n;
n--;
}
System.out.println( "Factorial is: " + factorial );
这将得到五的阶乘。但它并不完全基于我们所说的公式。还有另一种计算方法,从1开始:
int n = 5;
int factorial = 1;
int count = 1;
while ( count <= n ) {
factorial *= count;
count++;
}
System.out.println( "Factorial is " + factorial );
请注意,我对它进行了更多的修改,以便它可以使用零。零的阶乘是一种特殊情况,所以我们不应该乘以零——这将使所有的阶乘都是错误的。因此,我将循环更改为仅在我将count增加到1之后才进行乘法。但这也意味着您必须从循环中打印出最终的阶乘。首先,第二个循环不起作用的原因是for中的条件错误。中间的条件是使循环继续,而不是停止。你刚才说的是从9开始,在数字小于0时工作。当然,你的数字一开始就大于零 其次,我认为使用for循环有点作弊,因为for循环只是while循环的一个特例 现在来谈谈阶乘本身的问题。你知道一个阶乘n!定义为n-1*n 计算一个特定阶乘的基本循环是:
int n = 5;
int factorial = 1;
while ( n > 0 ) {
factorial *= n;
n--;
}
System.out.println( "Factorial is: " + factorial );
这将得到五的阶乘。但它并不完全基于我们所说的公式。还有另一种计算方法,从1开始:
int n = 5;
int factorial = 1;
int count = 1;
while ( count <= n ) {
factorial *= count;
count++;
}
System.out.println( "Factorial is " + factorial );
请注意,我对它进行了更多的修改,以便它可以使用零。零的阶乘是一种特殊情况,所以我们不应该乘以零——这将使所有的阶乘都是错误的。因此,我将循环更改为仅在我将count增加到1之后才进行乘法。但这也意味着您必须从循环中打印出最终的阶乘。您可以将for循环与while循环一起使用吗?for count=9;计数<0;计数-表示:从计数为9开始;循环,只要计数小于0;每次迭代时,递减计数为1。可见,count<0应该是count>=0。计算阶乘时不需要两个循环。再考虑一下您的算法。在for条件中更改为count>=0您必须将for循环的条件更改为>=0您可以将for循环与while循环一起使用吗?for count=9;计数<0;计数-表示:从计数为9开始;循环,只要计数小于0;每次迭代时,递减计数为1。可见,count<0应该是count>=0。计算阶乘时不需要两个循环。再考虑一下您的算法。在for cond中更改为count>=0
如果您必须将For循环的条件更改为>=0,我相信这个想法是通过一个while循环获得从9到0的所有阶乘。你只计算了一个阶乘。对不起,我没有注意到。在这种情况下,结果也应该显示0的阶乘,我刚刚更新了代码。如果顺序很重要,只需将结果最初存储在一个数组中并以相反的方式打印就足够了。我相信这个想法是通过一个while循环获得从9到0的所有阶乘。你只计算了一个阶乘。对不起,我没有注意到。在这种情况下,结果也应该显示0的阶乘,我刚刚更新了我的代码。如果顺序很重要,只需将结果最初存储在数组中并以相反的方式打印就足够了。谢谢,到目前为止,您是否有机会解释这一行?res=值+i>1?,:+res@DeFa1T中间的奇怪部分仅仅是为了避免在输出结束时增加一个额外的值,只要i>1。这一行在先前计算的阶乘之前添加下一个阶乘,这样输出将从9开始反转!以1!结尾!。谢谢,你能解释一下这句话吗?res=值+i>1?,:+res@DeFa1T中间的奇怪部分仅仅是为了避免在输出结束时增加一个额外的值,只要i>1。这一行在先前计算的阶乘之前添加下一个阶乘,这样输出将从9开始反转!以1!结尾!。