糯米文學吧

位置:首頁 > 計算機 > C語言

如何使用C語言求N的階乘

C語言3.23W

使用C語言求N的階乘的方法是很多小夥伴都想知道的,下面小編給大家介紹如何使用C語言求N的階乘,歡迎閲讀!

如何使用C語言求N的階乘
  如何使用C語言求N的階乘

用遞歸法求N的.階乘

程序調用自身稱為遞歸( recursion).它通常把一個大型複雜的問題層層轉化為一個與原問題相似的規模較小的問題來求解.

遞歸的能力在於用有限的語句來定義對象的無限集合。

一般來説,遞歸需要有邊界條件、遞歸前進段和遞歸返回段。當邊界條件不滿足時,遞歸前進;當邊界條件滿足時,遞歸返回。

12345678910111213141516171819202122232425262728293031323334353637383940414243#include <stdio.h>#include <string.h>#include <stdlib.h>longfactorial(intn){if(n == 1) return1;else returnn*factorial(n-1);}intmain(intargc,char*argv[]){intn = 0;if(argc != 2){ printf("input error,exit!!"); return-1;}n =atoi(argv[1]);printf("%d! = %ld",n,factorial(n));return0;}

習題示例

題目

 題目描述:

輸入一個正整數N,輸出N的階乘。

輸入:

正整數N(0<=N<=1000)

輸出:

輸入可能包括多組數據,對於每一組輸入數據,輸出N的階乘

樣例輸入:

4

5

15

樣例輸出:

24

120

1307674368000

 AC代碼

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX 3000//存儲每次階乘運算的結果intstr[MAX];voidcalculateFactorial(intn);intmain(){intn;while(scanf("%d", &n) != EOF) { if(n == 0) { printf("1"); }else{ calculateFactorial(n); }}return0;}voidcalculateFactorial(intn){inti, j, temp, c, len;memset(str, 0,sizeof(str));str[1] = 1;for(i = 2, len = 1; i <= n; i ++) {//循環與2,3,..n相乘 for(j = 1, c = 0; j <= len; j ++) {//str數組代表一個數,模擬與i相乘 temp = str[j] * i + c; str[j] = temp % 10; c = temp / 10; } while(c > 0) { str[j ++] = c % 10; c /= 10; } len = j - 1;}for(i = len; i >= 1; i --) { printf("%d", str[i]);}printf("");}

/**************************************************************

Problem: 1076

User: wangzhengyi

Language: C

Result: Accepted

Time:2150 ms

Memory:916 kb

標籤:階乘 語言