c語言程序階乘
❶ 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!! ");
return -1;
}
n = atoi(argv[1]);
printf("%d! = %ld ",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 ");
} 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(" ");
}
/**************************************************************
Problem: 1076
User: wangzhengyi
Language: C
Result: Accepted
Time:2150 ms
Memory:916 kb
❷ 階乘如何用c語言實現
1、首先打開CodeBlocks編輯器,新建一個空白頁面,寫入頭文件和主函數:
❸ c語言階乘怎麼表示
/*This program can calculate the factorial of (int n).*/
#include <stdio.h>
int factorial(int n)
{
return (n == 1)?n:factorial(n-1)*n;//recursion.
}
int main(void)
{
int n,fac;
printf("Please input the value of n:");//initialize n.
scanf("%d",&n);
fac = factorial(n)//variable fac is not necessary.
printf("The result is:%d ",fac);
return 0;
}
(3)c語言程序階乘擴展閱讀:
階乘是定義在自然數范圍里的(大多科學計算器只能計算 0~69 的階乘),小數科學計算器沒有階乘功能,如 0.5!,0.65!,0.777!都是錯誤的。但是,有時候我們會將Gamma 函數定義為非整數的階乘,因為當 x 是正整數 n 的時候,Gamma 函數的值是 n-1 的階乘。
❹ 一個c語言程序,關於階乘
#include <stdio.h>
main()
{
int b=1,n;
float s; /*這里S應該定義為long型才好.朋友.*/
for(n=1;n<=20;n++)
{
b = b*n;
s += b;
}
printf("%ld\n",s);
}
❺ C語言中階乘怎麼輸
1、不是直接輸入n!,需要一定的演算法才可以實現。具體方法是,首先打開編輯器,准備好空白的C語言文件:
❻ C語言中如何編寫N的階乘
1、打開visual C++軟體,新建任務,滑鼠左鍵點擊文件,選擇C++ source file:
❼ 用C語言編寫1到10的階乘
#include<stdio.h>
int main()
{
int a=1,i;
for(i=1;i<=10;i++)
a=a*i;
printf("10的階乘=%d",a);
return 0;
}
(7)c語言程序階乘擴展閱讀:
在C語言中,有三種類型的循環語句:for語句、while語句和do While語句。分別介紹如下:
for
for為當型循環語句,它很好地體現了正確表達循環結構應注意的三個問題:
⑴控制變數的初始化。
⑵循環的條件。
⑶循環控制變數的更新。
while:
while結構循環為當型循環(when type loop),一般用於不知道循環次數的情況。維持循環的是一個條件表達式,條件成立執行循環體,條件不成立退出循環。
while語句格式為:
while(條件表達式)
循環體
每次執行循環體前都要對條件表達式進行判斷。
參考資料來源:網路-循環語句
❽ c語言 編程實現求n!要求用定義求階乘的函數
1、打開vs2017軟體,新建c語言的工程,首先開頭引入頭文件,然後調用先調用一下求階乘的函數和空的主函數,最下方定義prime函數用來求階乘:
❾ C語言中如何編程計算階乘
常見的有兩種:
遞歸版本:
intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}
還有一種是循環版:
intans=1;
for(inti=1;i<=n;i++)ans*=i;
測試方法:
#include<stdio.h>
intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}
intmain(){
intn;
while(scanf("%d",&n)!=EOF){
intans=1;
for(inti=1;i<=n;i++)ans*=i;
printf("%d%d ",ans,Fac(n));
}
return0;
}
有個值得注意的地方:階乘時,數增大的很快,在n達到13時就會超過int的范圍,此時可以用long long或是 __int64來存儲更高精度的值,如果還想存儲更高位的,需要用數組來模擬大數相乘。
❿ C語言,求n階乘的代碼
思路:所謂n的階乘就是從1到n的累積,所以可以通過一個for循環,從1到n依次求積即可。
#include <stdio.h>
int main()
{
int i, n;
int sum = 1;
printf("請輸入n: ");
scanf("%d", &n);
for(i=1; i<=n; i++)
{
sum = sum*i;
}
printf("n的階乘是%d ", sum);
return 0;
}
定義范圍
通常所說的階乘是定義在自然數范圍里的(大多科學計算器只能計算 0~69 的階乘),小數科學計算器沒有階乘功能,如 0.5!,0.65!,0.777!都是錯誤的。但是,有時候我們會將Gamma 函數定義為非整數的階乘,因為當 x 是正整數 n 的時候,Gamma 函數的值是 n-1 的階乘。
以上內容參考:網路-n!