利用c語言求階乘例如求20用迴圈和函式兩種方法

2021-05-27 11:44:45 字數 5800 閱讀 2130

1樓:霜之詠歎調

對於階乘

,你需要考慮到輸入的數的大小,進行判斷n<0,無階乘;n==0||n==1階乘為1;

n>1的就使用者迴圈,或者呼叫函式來做

1.迴圈

#include

void main()

else

if(n==0||n==1)

}2.函式

#include

void main()

float fac(int n)

else

if(n==0||n==1)

f=1;

else

f=fac(n-1)*n;

return (f);}

2樓:匿名使用者

由於要求的整數可能大大超出一般整數的位數,程式用一維陣列儲存長整數,儲存長整數陣列的每個元素只儲存長整數的一位數字。如有m位成整數n用陣列a儲存:

n=a[m]×10^(m-1)+a[m-1]×10^(m-2)+ … +a[2]×10^1+a[1]×10^0

並用a[0]儲存長整數n的位數m,即a[0]=m。按上述約定,陣列的每個元素儲存k的階乘k!的一位數字,並從低位到高位依次存於陣列的第二個元素、第三個元素……。

例如,5!=120,在陣列中的儲存形式為:

3 0 2 1 ……

對應:a[0] a[1] a[2] a[3]

首元素3表示長整數是一個3位數,接著是低位到高位依次是0、2、1,表示成整數120。

計算階乘k!可採用對已求得的階乘(k-1)!連續累加k-1次(即k個(k-1)!

相加)後求得。例如,已知4!=24,計算5!

,可對原來的24累加4次24後得到120。對應程式如下:

#include

#include

#define maxn 1000

/*factorial:求k的階乘:連續加(k-1)次(k-1)!,便得到了k!

結果儲存在陣列a中。a[0]為結果的位數,其後

下標從小到大表示階乘的低位到高位

*/void factorial(int a,int k)

//主函式

int main()

,n,k;

printf("====用遞推法求階乘====\n");

printf("請輸入正整數n: "); //輸入n,求n!

scanf("%d",&n);

a[0]=1; //初始化,1的階乘是1位

a[1]=1; //1!的值為1

printfactorial(a,1); //列印它的結果

for (k=2;k<=n;k++)

return 0;}

3樓:振雲

20的階乘太大了,我求的是10的階乘,你要很想求20的階乘的話就用 long double試試

#include

int main()

printf("k!=%d",k);

return 0;

} 下面是呼叫函式的

#include

int jiecheng(int a)

int main()

其實呼叫函式和上面的一模一樣,這樣做只是為了程式的客觀性,你也可以定義靜態變數,那樣函式會簡單些,不過有點難理解

4樓:匿名使用者

比如待求階乘的數為num,最後的結果放在sum中。

迴圈int sum = 1;

for (int i = 2; i <= num; i++) sum *= i;

函式int jieshen(int num)

5樓:匿名使用者

1.double sum=1;

int i;

for(i=1;i<=20;i++)

sum=sum*i;

printf("%.0lf",sum);

2.double f(int m)

int main()

6樓:匿名使用者

int i;

void f1(int n)

void f2(int n)

用c語言程式設計,求從1的階乘一直加到20的階乘。 5

7樓:飛喵某

1、首先開啟c語言編bai輯器,新du

建一個c語言的檔案zhi,匯入頭dao檔案並設定一個主函式版:

2、程式中設定一個權迴圈的臨時變數和接受階乘和的sum變數,迴圈中先遍歷出20以內的數字子,然後計算每個數的階乘,在將它們相加起來,因為是一個非常大的數,所以這裡sum是double型別的,最後把結果輸出就可以了:

3、最後除錯編譯程式,就會看到輸出的20階乘內的和了,是一個非常大的數。以上就是用c語言求20以內階乘和的方法:

8樓:匿名使用者

czx99201的程式不好。重

bai復計算。

階乘du

不必zhi每次都計算。而且為什麼dao要用浮點?專我的屬程式如下:

main ()

printf ("%ld\n", sum);

9樓:愛是一生的語病

#include

main()

printf("ss=%lld",ss);

}輸出ss=2561327494111820313這才是正確答回案答

10樓:育知同創教育

抄#include

baivoid main()

printf("%e\n",sum);

}先求du出第n項階乘,zhi然後把前n-1項階乘的dao和加上第n項。

11樓:匿名使用者

#include

void main()

printf("%e\n",sum);}

c語言 程式設計實現求n!要求用定義求階乘的函式

12樓:飛喵某

1、開啟vs2017軟體,新建c語言的工程,首先開頭引入標頭檔案,然後呼叫先呼叫一下求階乘的函式和空的主函式,最下方定義prime函式用來求階乘:

2、主函式中用scanf函式接受使用者輸入的的數字,接著將輸入的數傳入處理階乘的函式中完成計算,最後輸出列印結果。prime函式有一個引數,首先判斷是否為正數,然後用prime函式自身乘以引數s,最後返回值即可完成:

3、將程式編譯執行,彈出視窗輸入任意的數,計算階乘;這裡輸入7,得到結果是5040。以上就是c語言求階乘的方法:

13樓:文化廚子

#include

long fac(unsigned n)

else

}int main()

注意:0的階乘是1,不是0,因為階乘表示的是全排列,是從n箇中取出n個的所有的取法總數。所以當n==0或者n==1時返回1。

14樓:匿名使用者

本人小白,多多指教

#pragma warning(disable:4996) //vs07防報錯

#include

#include

int factorial(int n)

return resulta;

}int sum(int n)

return resultb;

}int main()

還可以寫成:

#pragma warning(disable:4996)

#include

#include

int sum(int n)

return resultb;

}int main()

寫了兩個自定義函式: factorial()用來計算階乘,sum()用來計算累加值。

factorial()

第一部分:

n!=1x2x3...xn。設resulta=1x2x3....xn。用i表示第幾次計算。

數學計算的詳細步驟:

當i=1時, 1x1=1 第1次計算

當i=2時, 1x2=2 第2次計算

當i=3時, 2x3=6 第3次計算

當i=4時, 6x4=24 第4次計算

當i=n-1時 ax(n-1)=b 第n-1次計算

當i=n時, bxn=c 第n次計算

第二部分:

在c語言中乘法計算例如:int a=1;a=a*2意思是將a的原來的值(舊值)1x2將結果(新值)賦值給a,

a的值變為2.再進行a=a*3意思就是將a原來的值2x3將結果(新值)再次賦值給a,a的值變為6.

上面可以看出:(resulta簡寫為a)

i=1時,(a的舊值)1xi=(a的新值)1 。第1輪結束,a的值從舊值1變成了新值1.

(第一輪中a的新值1相對在第二輪中,看做是a的舊值,依次類推)

i=2時,(a的舊值)1xi=(a的新值)2。 第2輪結束,a的值從舊值1變成了新值2.

i=3時,(a的舊值)2xi=(a的新值)6。 第3輪結束,a的值從舊值2變成了新值6.

i=4時,(a的舊值)6xi=(a的新值)24。第4輪結束,a的值從舊值6變成了新值24.

i=n時,(a的舊值)bxi= (a的新值)b。 第n輪結束,a的值從舊值$變成了新值$(這個新值就是最終值).

第三部分:上面可以看出:

計算a的最終值:進行了n輪,迴圈計算:a的舊值xi=a的新值。

將a的舊值xi=a的新值,寫成**的形式:resulta=resulta*i;即resulta*=a;

從第二部分還能看出:i的初值是i=1;i的範圍是i<=n;i的變化是每次自身+1即i++;迴圈計算->for語句。

resulta初值是1.

int i,resulta=1;

for(i=1;i<=n;i++)

sum()

第一部分:

從1!+2!+3!....+n!可以看出一共有n個階乘。設resultb=1!+2!+3!....+n!(resultb簡寫b)

當n=1,只有1!,0+1!=1 只有1次計算 。當n=2時有1!,2!,先計算0+1!=1再1+2!=3,有兩次計算。

當n=3,有1!,2!,3!。先算0+1!=1再1+2!=3再3+3!=9,有3次計算,依次類推

當n=n,有1!,2!.....n!。會有n次計算。用i表示第幾次計算。

換種寫法:

當i=1時,第一次計算 0+1!值=0+1=1

當i=2時,第二次計算 1+2!值=1+2=3

當i=3時,第三次計算 3+3!值=3+6=9

當i=4時,第四次計算 9+4!值=9+24=33

當i=n-1時第n-1次計算 e+(n-1)!值=a

當i=n時,第n 次計算 a+n!值=a+b=resultb

根據c中加法的意思:

i=1, b舊+ factorial(1)=b新 呼叫factorial()

i=2, b舊+ factorial(2)=b新

i=n, b舊+ factorial(i)=b新

第二部分:

寫成**:resultb=resultb+ factorial(i),

1的初值i=1;i的範圍i<=n;i每次自身加一i++;迴圈計算->for語句。

int i,resultb=0;

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

resultb+= factorial(i)

c語言遞迴求階乘,c語言怎麼用遞迴呼叫函式的方法求n的階乘?

舉例 用遞迴方法求n include int main int n int y printf input a integer number scanf d n y fac n printf d d n n,y return 0 int fac int n int f if n 0 printf n ...

快來幫幫我C語言函式呼叫求階乘,快來幫幫我 C語言函式呼叫 求階乘 !!!

int jc 這裡宣告的bai 引數du與定義zhiint jc int n int sum 的不一樣 返回值dao沒有 回 打進去 正確如下 答 include int jc int n void main int jc int n return sum include int jc int n ...

用c語言編寫程式,求s1,用C語言編寫程式,求S11223nn1,直到最後一項的絕對值小於

只求從bai第二項起的浮點du 和,把第一項1作為初值zhi直接賦給和dao變數s。如內下 include stdio.h int main int argc,char argv 執行結果如下 最後一項的絕對值小於10的幾次方呀 最後問題顯示沒顯示完整 include stdio.h double ...