程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> 應用C說話求N的階乘的辦法

應用C說話求N的階乘的辦法

編輯:關於C++

應用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
    ****************************************************************/

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved