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

nyoj 大數階乘

大數階乘

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

大數階乘,也是模擬,要有基本思路

程式碼:

#include<stdio.h>  
int main()
{
	int large_num[16326] = { 1 };
	int num, zero = 0;
	int i, j, k, n;
	int top;

	scanf("%d", &num);
	for (i = 2, top = 1; i <= num; i++){
		k = i;
		while (k % 10 == 0){
			k /= 10;
			zero++;
		}
		for (j = 0; j < top; j++)
			large_num[j] *= k;

		for (n = 0; ; n++){
			large_num[n + 1] += large_num[n] / 10;
			large_num[n] %= 10;
			if (n + 1 == top){
				if (large_num[n + 1] != 0)
					top++;
				else
					break;
			}
		}
	}
	for (i = top - 1; i >= 0; i--)
		printf("%d", large_num[i]);
	for (i = 0; i < zero; i++)
		printf("0");
	printf("\n");
	return 0;
}


相關推薦

nyoj 大數

大數階乘 時間限制: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 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

斯特林(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,所以我們把個

java大數

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

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

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

大數(藍橋杯)

/* 1000!的階乘有多少位數字?不知道,總之,十個long long也是不夠用的,所以考慮用陣列來模擬乘法運算,那麼陣列開多長合適呢?其實博主最開始開的2000,結果。。。提交上去只過了80%資料,顯然,2000位不夠,最後開了個3000的陣列直接AC了。那麼下面來說說模擬大數運算吧!!