1. 程式人生 > >nyoj 28大數階乘

nyoj 28大數階乘

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

模擬乘法運算
核心程式碼:
每一位的計算結果 =a[x] * 乘數 + 進位
a[x] = 結果%10
進位 = 結果 / 10

#include<stdio.h>
int a[100000]= {0};
int main()
{
    int n,i,j,k,num,m;
    while(~scanf("%d",&n))
    {
        int num=1;//num統計位數,位數最小為1,將num初始化為1
        a[0]=1;   
        for(i=1; i<=n; i++)
        {
            k=0;
            for(j=0; j<num; j++)
            {
                m=a[j]*i+k; //從最低位開始乘的結果
                a[j]=m%10;  //該位上的值
                k=m/10;     //向前一位進數
            }
            while(k)   //如果k不等於0,這說明最高位也需要進位,位數num增加
            {
                a[num++]=k%10;
                k/=10;
            }
        }
        for(i=num-1; i>=0; i--)
            printf("%d",a[i]);
        printf("\n");
    }
    return 0;
}


相關推薦

NYOJ 28 大數(JAVA)

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

nyoj 28大數

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

NYOJ:28-大數

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

NYOJ 28.大數大數問題)

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

NYOJ.28.大數

28.大數階乘 時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 描述 我們都知道如何計算一個數的階乘,可是,如果這個數很大呢,我們該如何去計算它並輸出它? 輸入 輸入一個整數m(0<m<=5000) 輸出 輸出m的階乘,並在輸出結束之後輸入

nyoj 28 大數

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

NYOJ,28,大數

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

NYOJ 28.大數

/* 大數階乘 輸入 輸入一個整數m(0<m<=5000) 輸出 輸出m的階乘,並在輸出結束之後輸入一個換行符 樣例輸入 50樣例輸出 30414093201713378043612608166064768844377641568960512000000000

南陽理工題目28大數

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

nyoj 大數 28

#include<stdio.h> #include<string.h> int a[3270];//其實我先開的很大,後來通過a[0]的值判斷,然後改的小了,儘量佔得空間少一點 int main() { int n; while(~scanf("%d",&n)

NYOJ---大數---28

大數階乘時間限制:3000 ms | 記憶體限制:65535 KB 難度:3 描述 我們都知道如何計算一個數的階乘,可是,如果這個數很大呢,我們該如何去計算它並輸出它? 輸入 輸入一個整數m(0<m<=5000) 輸出 輸出m的階乘,並在輸出結束之後

nyoj 大數

大數階乘 時間限制:3000 ms  |  記憶體限制:65535 KB 難度:3 描述             我們都知道如何計算一個數的階乘,可是,如果這個數很大呢,我們該如何去計算它並輸出

南陽oj 大數 題目28

 啊啊啊啊啊啊啊啊啊學的太少了<h2>大數階乘</h2><div class="problem-ins"> 時間限制:<span class="edita

題目28大數

題目連結: 描述 我們都知道如何計算一個數的階乘,可是,如果這個數很大呢,我們該如何去計算它並輸出它? 輸入 輸入一個整數m(0<m≤5000) 輸出 輸出每組測試資料中揹包內的物品的價值和,每次輸出佔一行。 樣例輸入 50 樣例

斯特林(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該題,原理不難理解,就是用陣列來儲存階乘的結果,主要就是按位進行處理,包括進位的處理

大數——詳解講解

題目詳情:NYOJ-大數階乘       階乘相信大家都不陌生,簡單一點的迴圈遞迴都可以解決。              在這裡將要講解的

N! (n的)(大數

Description Given an integer N(0 ≤ N ≤ 10000), your task is to calculate N! Input One N in one line, process to the end of file. Output

大數or相乘

大數相乘或者階乘不能用傳統乘號直接來原因是乘出來數太大了,計算機記憶體受不了,比如12!為億級,100!有97位;程式設計界處理這類大數問題一般這麼處理: 如果現在要求:2746512,那麼乘的過程是: 對於個位:312=36,那麼可以斷定27465*12的個位數一定是6,所以我們把個