應用C說話求N的階乘的辦法。本站提示廣大學習愛好者:(應用C說話求N的階乘的辦法)文章只能為提供參考,不一定能成為您想要的結果。以下是應用C說話求N的階乘的辦法正文
用遞歸法求N的階乘
法式挪用本身稱為遞歸( recursion).它平日把一個年夜型龐雜的成績層層轉化為一個與原成績類似的范圍較小的成績來求解.
遞歸的才能在於用無限的語句來界說對象的無窮聚集。
普通來講,遞歸須要有界限前提、遞歸進步段和遞歸前往段。當界限前提不知足時,遞歸進步;當界限前提知足時,遞歸前往。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
long factorial(int n)
{
if(n == 1)
return 1;
else
return n*factorial(n-1);
}
int main(int argc,char *argv[])
{
int n = 0;
if(argc != 2)
{
printf("input error,exit!!\n");
return -1;
}
n = atoi(argv[1]);
printf("%d! = %ld\n",n,factorial(n));
return 0;
}
習題示例
標題
標題描寫:
輸出一個正整數N,輸入N的階乘。
輸出:
正整數N(0<=N<=1000)
輸入:
輸出能夠包含多組數據,關於每組輸出數據,輸入N的階乘
樣例輸出:
4
5
15
樣例輸入:
24
120
1307674368000
AC代碼
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 3000
//存儲每次階乘運算的成果
int str[MAX];
void calculateFactorial(int n);
int main()
{
int n;
while (scanf("%d", &n) != EOF) {
if(n == 0) {
printf("1\n");
} else {
calculateFactorial(n);
}
}
return 0;
}
void calculateFactorial(int n)
{
int i, 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("\n");
}
/**************************************************************
Problem: 1076
User: wangzhengyi
Language: C
Result: Accepted
Time:2150 ms
Memory:916 kb
****************************************************************/