当前位置:首页 » 操作系统 » 阶加算法代码

阶加算法代码

发布时间: 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、、

热点内容
我的世界龙蛋服务器 发布:2025-05-17 06:20:06 浏览:912
安卓系统软件怎么不更新 发布:2025-05-17 06:19:15 浏览:817
安卓夏日传说存档放哪个文件 发布:2025-05-17 06:12:44 浏览:606
如何通过服务器id找到主人 发布:2025-05-17 06:12:11 浏览:37
ug编程吧 发布:2025-05-17 06:07:45 浏览:72
sql临时表和表变量 发布:2025-05-17 06:02:38 浏览:724
苹果如何用安卓无线耳机 发布:2025-05-17 06:01:53 浏览:822
sqlserver表关系 发布:2025-05-17 06:01:02 浏览:997
2017途观配置什么音响 发布:2025-05-17 05:53:50 浏览:844
64位安装sql2000 发布:2025-05-17 05:33:17 浏览:846