1. 程式人生 > 其它 >階乘計算升級版 (20分)

階乘計算升級版 (20分)

技術標籤:筆記演算法

原題如下:
本題要求實現一個列印非負整數階乘的函式。

函式介面定義:
void Print_Factorial ( const int N );
其中N是使用者傳入的引數,其值不超過1000。如果N是非負整數,則該函式必須在一行中打印出N!的值,否則列印“Invalid input”。

裁判測試程式樣例:
#include <stdio.h>

void Print_Factorial ( const int N );

int main()
{
int N;

scanf("%d", &N);
Print_Factorial(N);
return 0;

}

/* 你的程式碼將被嵌在這裡 */
先展示一下原始碼吧

void Print_Factorial ( const int N ){ 
	int a[3000],i,mid,js=0,k,shu;//mid過渡變數 js記下此刻所算數的位數 shu此刻所算數 陣列a用來儲存各位上的數
	a[0]=1;//之所以等於1,因為零的階乘也是1!!!
	if(N<0) printf("Invalid input");
	else{
		for(i=2;i<=N;i++){//i 階乘數
			mid=0;
			for(k=0;k<=js;k++){//k以算數位數 js是記載 k是讀取 所以k<=js
shu=mid+a[k]*i;//計算 a[k]=shu%10;//儲存 mid=shu/10; } while(mid!=0){//判斷能否進位 a[++js]=mid%10;//進位並儲存 mid/=10;//除去以進位數 } } for(;js>=0;) printf("%d",a[js--]); } }

這道題的思路來源於乘法的運算公式,而這題就很好的體現了計算機思維於人的思維的區別,計算機需要你一步步的去讀取,計算,儲存;
而本質上是模擬手算的過程,最後逆序輸出結果陣列。
學計算機果然還是不能只看書,看視訊。還是要多去寫題,將是為了將人的思維轉化為計算機思維。不然就會像我一樣,本一下就能寫出了的題,卻花了一小時多。