1. 程式人生 > >計算大數階乘--Java版

計算大數階乘--Java版

    本文給出Java語言版的計算大數階乘的程式,本文使用動態陣列的儲存計算過程的中間結果和最終結果。每個short型陣列元素表示4位10進位制數。順便說一下,這是我的第一個Java程式。

import java.util.Scanner;
/**
 *
 * @author [email protected]
 */
public class Fac {
      public Fac() {
    }
    
    public static void Calc(int n)
    {
        int RAD=10000;
        int buffSize=(int)(n * Math.log10((n+1)/2) / Math.log10(RAD)+1);
        short[] buff = new short[buffSize];
        int len=1;
        buff[0]=1;
        for (int i=1;i<=n;i++)
        {
            int c=0;
            for (int j=0;j<len;j++)
            {
                int prod=(buff[j]*i+c);
                buff[j]=(short)(prod % RAD);
                c=prod / RAD;
            }
            while (c>0)
            {
                buff[len++]= (short)(c % RAD);
                c=c/RAD;
            }
        }
        
        System.out.printf("%d!=%d", n, buff[len-1]);
        for (int i=len-2;i>=0;i--)
            System.out.printf("%04d",buff[i]);
     }

    public static void main(String[] args) {
       System.out.println("Please input a integer");
       Scanner in=new Scanner(System.in);
       int n=in.nextInt();
       Calc(n);
    }
}


相關推薦

計算大數--Java

    本文給出Java語言版的計算大數階乘的程式,本文使用動態陣列的儲存計算過程的中間結果和最終結果。每個short型陣列元素表示4位10進位制數。順便說一下,這是我的第一個Java程式。 import java.util.Scanner; /** * * @auth

計算大數--Fortran

  本文給出一個使用Fortran語言的計算大數階乘的程式,該程式可以計算出1-21萬之間的數的階乘。Fortran表示公式翻譯語言,是最古老的高階語言,主要用途是科學計算,曾經很流行,但現在用的少了,他的大部分市場被C語言取代。在編寫本程式之前,我從未寫過Fortran程

計算大數

#include<stdio.h> #include<string.h> int main (void) { int N,sub,sub_a; int m,i,j,k,p; int res[500],a[500],b[500]; scanf (

大數Java實現

題目 描述 我們都知道如何計算一個數的階乘,可是,如果這個數很大呢,我們該如何去計算它並輸出它? 輸入輸入一個整數m(0<m<=5000) 輸出輸出m的階乘,並在輸出結束之後輸入一個換行符 樣例輸入 50 樣例輸出 30414093201713378

PTA_基礎程式設計題目集_6-10 計算升級 (20 分)“大數

題目地址 題目分析: 1.預估1000!的位數~~進行放大估計~~1000^900&100^100即是3*900+2*100+o<3000位; 2.這裡顯然需要利用陣列來儲存數字並進行運算,讓陣列成員每個儲存3位數字(題目條件已告知引數小於1000),我們構

java大數

//JAVA 大數階乘 import java.math.*; import java.util.Scanner; public class LargeNumber{ public sta

大數JAVA

小編初學Java,先解決一下大數問題,還請多多關注^-^ 描述 我們都知道如何計算一個數的階乘,可是,如果這個數很大呢,我們該如何去計算它並輸出它? 輸入 輸入一個整數m(0<m<=5000) 輸出 輸出m的階乘,並在輸出結束之後輸入一個換行符

Java利用BigInteger類求大數運算

進行大數運算,用到BigInteger類,首先介紹一下這個類 方法 描述 public BigInteger (String var) 將一個字串變為BigInteger型別的資料 public BigInteger add(BigInteg

java競賽-大數問題

        Java計算階乘(n!)需要使用實現使用BigDecimal類,因為用int最多正確算到12!,用long最多正確算到20!         計算機中提供了長整型和雙精度等能儲存較大

Java 大數簡單方法

import java.util.Scanner; public class nc030 { public static void main(String[] args) throws Exception { // TODO Auto-genera

HDU 1261 字串數(大數 除法 組合 java

生平第一次用java A題 這個題目明顯的一個全排列除以相同元素的排列數 import java.util.*; import java.math.*; public class Main { public static void main(St

NYOJ 28 大數JAVA

題目:大數階乘時間限制:3000 ms  |  記憶體限制:65535 KB描述我們都知道如何計算一個數的階乘,可是,如果這個數很大呢,我們該如何去計算它並輸出它?輸入輸入一個整數m(0<m<

ACM--大數--HDOJ 1042--N!--Java

HDOJ題目地址:傳送門 N! Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java

計算升級---pta測試基礎題

4-10 階乘計算升級版   (20分) 本題要求實現一個列印非負整數階乘的函式。 函式介面定義: void Print_Factorial ( const int N ); 其中N是使用者傳入的引數,其值不超過1000。如果N是非負整數,則該函式必須在一行中打印出

java-用陣列實現大數

import java.util.Scanner; class Factorial { void Carry(int[] array, int pos) { int i, carry = 0; for (i = 0; i <= pos; i++) {//

幾種大數演算法效率比較(Java

完整程式碼: package bigdatamul; import java.math.BigInteger; /** * 大數階乘 * * @Description: TODO(大數階乘) * * @author yzy * @date 201

(當N非常大時)巧用Java函式BigInteger計算N

資料型別       型別名       位長      取值範圍           預設值 布林型           boolean       1          true,false          false 位元組型             byte           8        

斯特林(Stirling)公式 求大數的位數

href put || tdi code const 但是 body https 我們知道整數n的位數的計算方法為:log10(n)+1n!=10^m故n!的位數為 m = log10(n!)+1 lgN!=lg1+lg2+lg3+lg4+lg5+...........

codewars--js--Large Factorials--+大數

ref 階乘 clas python count .cn exp pre n+1 問題描述: In mathematics, the factorial of integer n is written as n!. It is equal to the product of

codevs 1488 GangGang的煩惱 大數

codevs 1488 GangGang的煩惱 大數階乘 傳送門:http://codevs.cn/problem/1488/ 使用大數階乘的模版即能A該題,原理不難理解,就是用陣列來儲存階乘的結果,主要就是按位進行處理,包括進位的處理