<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # 用 Java 計算階乘的 3 種方法 > 原文: [https://howtodoinjava.com/puzzles/3-ways-to-calculate-factorial-in-java/](https://howtodoinjava.com/puzzles/3-ways-to-calculate-factorial-in-java/) 編寫程序以用 Java 計算[階乘](https://en.wikipedia.org/wiki/Factorial) – 可能是 [Java 面試](//howtodoinjava.com/java-interview-questions/)期間的編碼練習。 最好了解如何構建這樣的析因程序。 讓我們經歷以下三種方式: ## 1)使用迭代計算階乘 簡單而最基本的版本。 很高興知道,但由于性能原因沒有使用權。 ```java public static long factorialIterative ( long n ) { long r = 1; for ( long i = 1; i <= n; i++ ) { r*=i; } return r; } ``` ## 2)使用遞歸計算階乘 如果您使用的是 Java7 或更低版??本,那么這是您的最佳選擇。 一個很好接受的答案。 它使用遞歸來計算階乘。 ```java public static long factorialRecursive( long n ) { return n == 1 ? 1 : n * factorialRecursive( n-1 ); } ``` ## 3)使用流計算階乘(Java8) Java8 支持流,您可以使用流以最有效的方式計算階乘,如下所示。 ```java public static long factorialStreams( long n ) { return LongStream.rangeClosed( 1, n ) .reduce(1, ( long a, long b ) -> a * b); } ``` * 在這里,[`LongStream.rangeClosed(2, n)`](https://docs.oracle.com/javase/8/docs/api/java/util/stream/LongStream.html)方法創建內容為`[2, 3, ... , n]`的`long`流。 * `reduce (a, b) -> a * b`表示每對`a`和`b` – 將它們相乘并返回結果。 然后結果繼續到下一輪。 * 在簡化方法中使用的值“1”在第一次迭代中用作變量`a`的起始值。 ## 4)使用`BigInteger`計算大于 20 的數字的階乘 如果您為大于 20 的數字運行以上示例中的任何一個; 由于`long`數據類型的限制,您將獲得錯誤的輸出。 ```java System.out.println(getFactorial(20)); // 2432902008176640000 System.out.println(getFactorial(21)); // -4249290049419214848 ``` 值變得比`long`所能容納的更大。 **`BigInteger`類分配所需的內存,以容納需要保存的所有數據位。** 顯然,如果系統中預設了那么多的內存,則只能這樣。 現在,您將需要[`BigInteger`](https://docs.oracle.com/javase/7/docs/api/java/math/BigInteger.html)來保存更大的值,并使用以下代碼獲取階乘。 ```java public static BigInteger getFactorial(int num) { BigInteger result = BigInteger.ONE; for (int i = 1; i <= num; i++) result = result.multiply(BigInteger.valueOf(i)); return result; } ``` 現在,無論數量多大,您都可以得到階乘。 ```java System.out.println(getFactorial(22)); // 1124000727777607680000 System.out.println(getFactorial(32)); // 263130836933693530167218012160000000 System.out.println(getFactorial(132)); // Indeed a very long number is printed - Try yourself. ``` 學習愉快!
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看