當前位置:首頁 » 操作系統 » 階加演算法代碼

階加演算法代碼

發布時間: 2022-08-21 08:52:51

A. 用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里的函數)...。

B. 1到100的階乘代碼

給你100!
#include<stdlib.h>
#include<iostream.h>
#include<iomanip.h>

const int N=100;

int compute(unsigned int *s,int n)//s用來存儲一次的計算結果,n為本次計算的乘數,函數返回結果中有效數據的節數
{
unsigned long p; //暫時存放一節的結果
unsigned long more=0;//一次乘法的進位
int i; //循環變數

static int m=1;//存放結果中的節數,三位一節
static int q=0;//存放結果中最後為零的節數

//計算本次的結果
for(i=q;i<m;i++)
{
p=(long)s[i]*(long)n+more;
more=p/N;
s[i]=p-more*N;
}

//計算結果中最後為零的節數
while(s[q]==0)
q++;

//處理最高位
for(more=p/N;more;)
{
p=more;
more=p/N;
s[i++]=p-more*N;
m++; //有效節數增一
}

return m; //返回有效節數
}

void main()
{
unsigned int *s; //存放結果
int i; //循環變數
int m; //存放節數
int n; //求n的階乘

cout<<"請輸入一個正整數<0----100>:";
cin>>n;

if(n<0)
{
cout<<"輸入數據錯誤!"<<endl;
return;
}
else if(n==0)
{
cout<<"0!==1"<<endl;
return;
}

//初始化s
s=(unsigned int *)malloc(n*sizeof(s)*10);
for(i=1;i<n;i++) s[i]=0;
s[0]=1;

//計算結果
for(i=2;i<=n;i++)
m=compute(s,i);

while(s[m]==0)
m--;//過濾掉前面的零

//輸出結果
cout<<n<<"!=="<<s[m--];//最高一節

int num=1;
for(i=m;i>=0;i--)
{
num++;
cout<<','<<setw(3)<<setfill('0')<<s[i];
if((num%10)==0) cout<<endl;
}
cout<<endl;

//釋放空間
free(s);
}

JAVA的函數是一樣的.可惜JAVA的編碼我不會寫了.

C. 階乘的公式是什麼

n!=1×2×3×...×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。

亦即n!=1×2×3×...×n。階乘亦可以遞歸方式定義:0!=1,n!=(n-1)!×n。

資料來源:階乘_網路

D. 階乘的程序和演算法

沒說要什麼語言編寫的,我給你一個Java的:
public class Factorial
{ public static int factorial(int x)
{
if (x < 0)
{
throw new IllegalArgumentException("x must be>=0");
}
int fact = 1;
for(int i = 2; i <= x; i++)
{
fact *= i;
}
return fact;
}
public static void main(String args[])
{
System.out.print(factorial(10));
}
}

E. python中n的階乘的演算法

我的代碼是
#encoding=utf-8

s=1
n=int(input("請輸入一個整數n:"))
for i in range(1,n+1):
s=s*i
print(n,"!=",s)
結果:
python3 a.py
請輸入一個整數n:5
5 != 120

F. 階乘的公式是怎樣的

程序源代碼:

/**
*計算大數的階乘,演算法的主要思想就是將計算結果的每一位用數組的一位來表示:如要計算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;

G. c語言的求n的階乘的程序代碼

int f(int n)
{
if(n==1)
return 1;
else
return n*f(n-1);
}
這個是經典的迭代程序例子。

H. 求解:圖論中常見的最短路徑演算法有幾種都是什麼

主要是有三種、、

第一種是最直接的貪心dijkstra演算法、、可以利用堆數據結構進行優化、、缺點就是不能求有負權的最短路與判斷負環、、

第二種是bellman-ford演算法、、根據鬆弛操作的性質是可以來判斷負環的、、時間復雜度是O(nm)的、、

第三種是SPFA演算法、、把他單獨拿出來作為一種演算法並不是非常好的、、他的實質應該是上面的bellman-ford演算法的隊列優化時間復雜度更低、O(KE)、K的值約等於2、、

熱點內容
phprecv 發布:2025-05-17 11:55:00 瀏覽:610
福建時鍾監控網關伺服器雲主機 發布:2025-05-17 11:54:28 瀏覽:248
c資料庫壓縮 發布:2025-05-17 11:39:22 瀏覽:960
安卓手機如何連接音響功放 發布:2025-05-17 11:37:48 瀏覽:958
破解exe加密視頻 發布:2025-05-17 11:23:41 瀏覽:976
我的世界伺服器圈太大了怎麼辦 發布:2025-05-17 11:15:21 瀏覽:614
便宜的免費雲伺服器 發布:2025-05-17 11:08:50 瀏覽:779
中國頂級dhcp解析伺服器地址 發布:2025-05-17 11:06:27 瀏覽:36
php轉義html 發布:2025-05-17 11:04:00 瀏覽:569
鋼筋籠加密區規范 發布:2025-05-17 10:59:50 瀏覽:6