編程階乘問題
⑴ 編程階乘問題
說實話,沒有計算階乘的公式,也沒有簡便方法,只是硬算,也可以運用計算機,可以計算到65!,如果你想計算跟大的數,我建議你上網路尋找計算階乘的軟體,聽說多大的數都能計算出來。
還有這個參考:
由於階乘運沒清算的增長速度特別快(比2^n的增長速度快),對於較小整數的階乘運算採用簡單的遞規演算法可以實現,但是對於大整數的乘法(比如1000!),則傳統的遞規演算法就失去了作用。
由於本人的水平不高,用下列拙劣的方式實現,請高人多多指教。具體如下:定義一個很長的數組,用數組的每一項表示計算結果的每一位。例如,7!=5040,a[1000],則a[0]=0,a[1]=4,a[2]=0,a[3]=5。
程序源代碼:
/**
*計算大數的階乘,演算法的主要思想就是將計算結果的每一位用數組的一位來表示:如要計算5!,那麼首先將
*(1) a[0]=1,然後a[0]=a[0]*2,a[0]=2,
*(2) a[0]=a[0]*3,a[0]=6
*(3) a[0]=a[0]*4,a[0]=24,此時a[1]=2,a[0]=4
*/
public class Factorial
{
static int a[] = new int [10000];
static void factorial(int n)
{
for(int i=2; i< a.length; i++)
a[i] = 0; //將數組元素初始化
a[0] = 1; //用數組的一項存放計算結果的位數
a[1] = 1; //將第一項賦值為一
for(int j= 2; j <= n; j++)
{
int i=1;
int c = 0; //c表示向高位的進位枯升前
for(; i <= a[0]; i++)
{
a[i] = a[i] * j + c;//將來自低位的計算結果和本位的結果相加
c = a[i] / 10;
a[i] = a[i] % 10;
}
for(; c != 0; i++)
{
a[i] = c%10;
c = c / 10;
}
a[0] = i - 1;
}
}
public static void main(String[] args)
{
String num = args[0];
int count = 0;
int n = Integer.parseInt(num);
f(n);
for(int i= a[0]; i>笑塌0; i--)
{
count++;
System.out.print(/*"a[" + i + "]=" + */a[i]/* + " "*/);
}
System.out.println("\n"+count);
}
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=528778
參考資料:http://blog.csdn.net/hengshan/archive/2005/11/13/528778.aspx
⑵ c語言編程 輸入N 求N的階乘
輸入一個正整數n,輸出n!*/#include <stdio.h> //編譯預處理命令
int factorial(int n); //函數聲明
int main(int argc, char const *argv[]) //主函數
{
int n; //變數定義
scanf("%d", &n); //輸入一個整數
printf("%d
", factorial(n)); //調用函數計算階乘
return 0;
}int factorial(int n) //定義計算n!的函數
{
int fact = 1;
for (int i = 1; i <= n; ++i)
{
fact = fact*i;
}
return fact;
}
拓展資料
特點
1. C語言是高級語言。它把高級語言的基本結構和語句與低級語言的實用性結合起來。C 語言可以像匯編語言一樣對位、位元組和地址進行操作,而這三者是計算機最基本的工作單元。
2.C語言是結構式語言。結構式語言的顯著特點是代碼及數據的分隔化,即程序的各個部分除了必要的信息交流外彼此獨立。這種結構化方式可使程序層次清晰,便於使用、維護以及調試。C 語言是以函數形式提供給用戶的,這些函數可方便的調用,並具有多種循環、條件語句控製程序流向,從而使程序完全結構化。
3.C語言功能齊全。具有各種各樣的數據類型,並引入了指針概念,可使程序效率更高。而且計算功能、邏輯判斷功能也比較強大。
4. C語言適用范圍大。適合於多種操作系統,如Windows、DOS、UNIX、LINUX等等;也適用於多種機型。C語言對編寫需要硬體進行操作的場合,明顯優於其它高級語言,有一些大型應用軟體也是用C語言編寫的。
⑶ 用c語言編程,求從1的階乘一直加到20的階乘。
1、首先打開C語言編輯器,新建一個c語言的文件,導入頭文件並設置一個主函數:
⑷ 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的階乘
首先,是main,不是mail。
其次,本程序中是使用的是遞歸函數來實現n的階乘,因為在具體的計算判攜源機上實現的時候,遞歸是由棧(一種數據的組織形式)來實現的,而棧的大小是受限於計隱侍算機的可用空間的。所以,在計算n的階乘時,當n較大,在計算時可能會出現空間不足不能進行計算的情況,這種情況下,會返回result的值為0.提醒程序的使用者,本次計算結果不對,請檢查程序或者輸入數據。
最後,如果上面掘態這段看不懂也沒有關系,你可以輸入一個足夠大的數來測試一下,當result初值是否為0對程序有什麼影響。只有你自己試了,才能真正的掌握它。
⑹ 求一道C語言編程題:求n的階乘
思路:所謂n的階乘就是從1到n的累積,所以可以通過一個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\n",s);
return 0;
}
/*
運行結果:(例如求5的階乘)
5
120
*/
⑺ C語言編程 N的階乘
#include<stdio.h>
int main()
{
int n,i,f=1;
printf("請輸入一個整數:");
scanf("%d",&n);
for(i=2;i<=n;i++)
f*=i;
printf("%d!=%d ",n,f);
getch();
return 0;
}
⑻ 編程求階乘的問題
在這段代碼中,外層循環的目的是依次枚舉從1到5一共5個數字,存入變數j;內層循環的作用是求j的階乘,結果保存為變數a,然後把a累加到變數n。
求階乘需要從1開始,沿自然數列依次向上乘,結果累乘到變數a,所以每次內層循環開始時變數a必須被重置成1,否則求下一個數字的階乘時就不是從1開始計算了。
希望LZ能明白。
⑼ c語言如何求N的階乘
法/步驟
第一步、編程的第一步就是寫頭文件,對於初學者來說,只寫一個頭文件就可以了,即#include<stdio.h>
拓展資料
定義
n!=1×2×3...xn
n!=X×(X-1)×(X-2)...×1
1751年,歐拉以大寫字母M表示m階乘M=1x2x3...x...m
1799年,魯非尼在他出版的方程論著述中,則以小寫字母π表示m階乘。而在1813年,高斯則以Π(n)來表示n階乘。而用來表示n階乘的方法起源於英國,但仍未能確定始創人是誰。直至1827年,由於雅萊特的建議而得到流行,現在有時也會以這個符號作為階乘符號。
當n較大時,直接計算n!變得不可能,這時可通過斯特靈(Stirling)公式計算近似算或取得大小范圍。