導航:首頁 > 源碼編譯 > c語言階乘演算法設計

c語言階乘演算法設計

發布時間:2022-04-16 11:12:39

Ⅰ 階乘C語言設計

#include <stdio.h>

int main(void)
{
float e;
int i, k, n;//n表示最大階乘數

e = 1;
k = 1;

for (i = 1; i <= n; i++){
k *= i;

e += 1.0 / k;

}

return 1;

}

Ⅱ 用C語言怎麼編階乘運算

#include<stdio.h>

//這里用遞歸實現
intcaclu(intn)
{
if(0==n||1==n)
{
return1;
}

returnn*caclu(n-1);
}

intmain()
{
intn=5;

intresult=caclu(n);

printf("result=%d ",result);

return0;
}

希望採納

Ⅲ 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!

Ⅳ 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語言編寫50的階乘的演算法

#include<stdio.h>
#define N 50 /*可以是任意一個數的階乘,當然要計算機能夠存的下*/

int main()
{
int a[100], l=0, i, j;
for(i=0; i<100; i++)
a[i]=0;
a[0]=1;

for(i=2; i<=N; i++)
{
for(j=0; j<=l; j++)
a[j] *= i;
l+=3;
for(j=0; j<l; j++)
if(a[j]>9)
{
a[j+1]+=a[j]/10;
a[j] %=10;
}
while(a[l]==0) l--;
}

for(i=l; i>=0; i--)
printf("%d", a[i]);
printf("\n");
}

看了 樓下兩個 用int 存儲 50!
感覺有點不可思議, 至少應該用double啊,用double雖然不能保證精度,但至少可以很接近結果。

3樓的 一句話:「老師說過,可以自已定義一個類型來表示更大的數。。。」

自己是可以定義,你可以定義任意類型。只不過需要你自己來實現。 50!這種問題 就相當於 大數 的操作。
網上可以下載到大樹類, 支持 大數的+ - * / 開平方, 開根號,(幾乎所有math里的函數)...。

Ⅵ C語言中如何編程計算階乘

遞歸函數
fun(int n)
{ if (n==0) return 1;
else return n*fun(n-1);
}
只要主函數調用這個函數,即可計算階乘。

Ⅶ 用C語言設計實現要求:計算n的階乘(200<n<300)

階乘超過170,double就溢出了,所以200<n<300的階乘要考慮溢出問題,有兩種辦法,需要不完全精度時可以將尾數與階碼分開表示,如果要完整精度只能考慮大整數演算法,比較慢而且有點麻煩,下邊留一個尾數與階碼分開的演算法,希望能幫到樓主。代碼在VC6測試通過。

#include "stdafx.h"
#include "math.h"

#define MAX_N 10000000.00 //能夠計算的最大的n值,如果你想計算更大的數對數,可將其改為更大的值
#define MAX_MANTISSA (1e308/MAX_N) //最大尾數
typedef unsigned short WORD;

struct bigNum
{
double n1; //表示尾數部分
int n2; //表示階碼部分
};

short GetExpBase2(double a) // 獲得 a 的階碼
{
// 按照IEEE 754浮點數格式,取得階碼,僅僅適用於Intel 系列 cpu
WORD *pWord=(WORD *)(&a)+3;
WORD rank = ( (*pWord & 0x7fff) >>4 );
return (short)(rank-0x3ff);
}

double GetMantissa(double a) // 獲得 a 的 尾數
{
// 按照IEEE 754浮點數格式,取得尾數,僅僅適用於Intel 系列 cpu
WORD *pWord=(WORD *)(&a)+3;
*pWord &= 0x800f; //清除階碼
*pWord |= 0x3ff0; //重置階碼
return a;
}

void calcFac(struct bigNum *p,int n)
{
int i;
p->n1=1;
p->n2=0;
for (i=1;i<=n;i++)
{
if (p->n1 >= MAX_MANTISSA) //繼續相乘可能溢出,調整之
{
p->n2 += GetExpBase2(p->n1);
p->n1 = GetMantissa(p->n1);
}
p->n1 *=(double)i;
}
}

void printfResult(struct bigNum *p,char buff[])
{
double logx=log10(p->n1)+ p->n2 * log10(2);//求計算結果的常用對數
int logxN=(int)(floor(logx)); //logx的整數部分
sprintf(buff,"%.14fe%d",pow(10,logx-logxN),logxN);//轉化為科學計演算法形式的字元串
}

int main(int argc, char* argv[])
{
struct bigNum r;
char buff[32];
int n;
printf("n=?");
scanf("%d",&n);
calcFac(&r,n); //計算n的階乘
printfResult(&r,buff); //將結果轉化一個字元串
printf("%d!=%s\n",n,buff);
return 0;
}

Ⅷ C語言階乘演算法

#include<iostream>
using namespace std;
int main()
{
int sum = 0;

for ( int i = 1; i <= 20; i ++ )
{
int t = 1;
for ( int j = 1; j <= i; j ++ )
t *= j;
sum += t;
}
cout << sum << endl;
}

Ⅸ c語言如何求一個數的階乘

n的階乘就是從1到的累積,所以可以通過一個for循環,從1到n依次求積即可。

參考代碼:

#include "stdio.h"

int main() {

int n,i,s=1;

scanf("%d",&n);

for(i=1;i<=n;i++)//for循環求累積

s=s*i;

printf("%d ",s);

return 0;

}

/*

運行結果:(例如求5的階乘)

5

120

*/

(9)c語言階乘演算法設計擴展閱讀:

return用法:

return返回一個數值的意思就是把return<表達式>後面表達式的值返回給調用他的函數。舉個例子:

int sum(int i,int j)

{

return i+j;

printf("這個語句不會被執行,因為該子函數執行到上面的return語句就無條件結束了");

}

main()

{

int a=10,b=11,c;

c=sum(a,b);

printf("%d",c);

}

Ⅹ c語言算n的階乘的遞歸演算法

思路:遞歸求階乘函數,如果輸入的參數等於1則返回1,否則返回n乘以該函數下次遞歸。

參考代碼:

#include<stdio.h>
intfun(intn)
{
if(n==1||n==0)return1;//如果參數是0或者1返回1
returnn*fun(n-1);//否則返回n和下次遞歸的積
}
intmain()
{
intn;
scanf("%d",&n);
printf("%d ",fun(n));
return0;
}
/*
5
120
*/
閱讀全文

與c語言階乘演算法設計相關的資料

熱點內容
nginxphp慢 瀏覽:290
伺服器系統如何寫入u盤 瀏覽:10
cs社區伺服器怎麼改中文 瀏覽:23
360手機取消加密 瀏覽:962
python矩陣橫向求和 瀏覽:635
台灣伺服器主板廠商有哪些雲主機 瀏覽:81
php代碼部署到雲伺服器 瀏覽:724
本地伺服器怎麼打個人網站 瀏覽:131
用姓做個特效用哪個app 瀏覽:782
安卓faceme酷臉怎麼打開 瀏覽:290
python矩陣的運算符 瀏覽:800
程序員進公司干什麼 瀏覽:973
socket發數據java 瀏覽:566
上傳圖片伺服器開小差是什麼意思 瀏覽:785
pdf文件怎麼轉換為ppt文件 瀏覽:858
web前端開發與java 瀏覽:737
安卓如何卸載軟體 瀏覽:500
linux如何查看伺服器型號 瀏覽:282
php新建一個對象 瀏覽:684
滴滴加密錄像投訴 瀏覽:981