簡體   English   中英

使用for循環的階乘程序

[英]Factorial program using for loops

我是AP計算機科學專業的學生,​​我想知道如何使用for循環完成我的階乘代碼。 這是我到目前為止的內容:

import java.util.Scanner;
public class Factorial 
{

    public static void main(String[] args) 
    {
        int num;
        int factorial = 1;
        int i;
        Scanner input = new Scanner(System.in);
        System.out.println("Enter a number: ");
        num = input.nextInt();
        for(i = 1; i <= num; i++)
        {
            factorial *= i;
        }
        System.out.println("!"+num+"="+factorial);

我使用eclipse測試了它,它適用於所有整數,直到(包括)12。當我輸入13時,它給了我一個錯誤的數字。 有人可以向我解釋這是為什么以及如何糾正它?

另外,作業還說我需要打印除答案外要乘的數字(即,如果num = 5,則輸出為5!= 5 * 4 * 3 * 2 * 1 = 120) 有人可以指出我該問題的正確方向嗎?

Rahul首先將Int更改為BigInt,以解決12之后的數字問題,因為Int的最大值為2,147,483,647。 然后,將for循環更改為以下內容,以進行所需的打印。

String a = “”;

for(i = 1; i <= num; i++)
    {
        factorial = factorial.multiply(i);

        if(i==1)
              a = String.valueOf(i)
        else
             a = a + "*" + String.valueOf(i)

    }
    System.out.println("!"+num+"="+ a + "="+factorial);

這會將數字打印為1 * 2 * 3 * 5 ...如果要反轉5 * 4 * 3 ...則只需將for循環更改為for(i=num;i>=1;i--)

這是因為13的階乘大於整數的MAX_VALUE( 2147483647 )。 結果,從假定結果6227020800中減去MAX_VALUE,該結果大於MAX_VALUE( 4079537153 )。 再次從MAX_VALUE中減去此結果,並打印結果1932053504

以上僅是說明。 如下注釋所示,實際上,JVM不會減去該數字,而是溢出。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM