导航:首页 > 源码编译 > c语言阶乘算法设计

c语言阶乘算法设计

发布时间:2022-04-16 11:12:39

Ⅰ 阶乘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
*/
阅读全文

与c语言阶乘算法设计相关的资料

热点内容
滴滴加密录像投诉 浏览:975
word兼容pdf 浏览:641
阿里云轻量应用服务器怎么买 浏览:567
斗鱼程序员工资待遇 浏览:345
不能应用去色调整命令 浏览:893
开启设备加密 浏览:79
起亚压缩机保修 浏览:975
单片机国内发展趋势 浏览:771
警戒指标公式源码 浏览:130
python标准库之网络相关 浏览:38
adbjava 浏览:408
php工资太低 浏览:737
手动建造命令方块教程 浏览:7
英语三个命令 浏览:352
axure入门到精通pdf 浏览:39
应用软件怎么隐藏和加密 浏览:383
带有显卡的云服务器 浏览:795
slice切片python 浏览:485
建设工程比例折算法 浏览:745
蓝线是哪个app上的 浏览:551