Ⅰ 階乘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
*/