C语言编程 输入N 求N的阶乘

C语言编程 输入N 求N的阶乘,第1张

输入一个正整数n,输出n!/#include <stdioh>                      //编译预处理命令

int factorial(int n);                   //函数声明

int main(int argc, char const argv[])  //主函数

{  

int n;                              //变量定义

 

scanf("%d", &n);                    //输入一个整数

 

printf("%d\n", factorial(n));       //调用函数计算阶乘

return 0;

}int factorial(int n)                    //定义计算n!的函数

{

int fact = 1;  

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

 

{     

fact = facti;

 

}

return fact;

}

特点

1. C语言是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行 *** 作,而这三者是计算机最基本的工作单元。

2.C语言是结构式语言。结构式语言的显著特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。

3.C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大。

4. C语言适用范围大。适合于多种 *** 作系统,如Windows、DOS、UNIX、LINUX等等;也适用于多种机型。C语言对编写需要硬件进行 *** 作的场合,明显优于其它高级语言,有一些大型应用软件也是用C语言编写的。

阶乘:

阶乘是基斯顿·卡曼(Christian

Kramp,1760~1826)于

1808

年发明的运算符号,是数学术语。

一个正整数的阶乘(英语:factorial)是所有小于及等于该数的正整数的积,并且有0的阶乘为1。自然数n的阶乘写作n!。1808年,基斯顿·卡曼引进这个表示法。

亦即n!=1×2×3××n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

C语言

C

语言中,使用循环语句可以很方便的求出阶乘的值,下面介绍一个很简单的阶乘例子。(因为网上多数是比较麻烦的方法)

计算出“

1!+

2!+

3!+

……

+

10!”的值是多少?

#include<stdioh>

int

main()

{

int

x;

long

j=1,sum=0;

for(x=1;x<=10;x++)

{

j=x;

sum+=j;

}

printf("1!+2!++10!=%ld\n",sum);

return

0;

}

/结果:4037913/

Pascal中program

test;

varn:longint;

function

jc(n:longint):qword;

begin

if

n=0

then

jc:=1

else

jc:=njc(n-1)end;

begin

readln

(n);

writeln

(jc(n))end

C++

#include<iostream>

using

namespace

std;

long

long

f(int

n)

{

long

long

e=1;

if(n>0)

e=nf(n-1);

cout<<n<<"!="<<e<<endl;

return

e;

}

int

main()

{

int

m=20;

f(m);

return

0;

}

以上使用

C++

11

标准

也可以利用积分求浮点数阶乘:

#include<cstdio>

#include<cmath>

double

s;

const

double

e=exp(10);

double

F(double

t)

{

return

pow(t,s)pow(e,-t);

}

double

simpson(double

a,double

b)

{

double

c=a+(b-a)/2;

return

(F(a)+4F(c)+F(b))(b-a)/6;

}

double

asr(double

a,double

b,double

eps,double

A)

{

double

c=a+(b-a)/2;

double

L=simpson(a,c),R=simpson(c,b);

if(fabs(L+R-A)<=15eps)

return

L+R+(L+R-A)/150;

return

asr(a,c,eps/2,L)+asr(c,b,eps/2,R);

}

double

asr(double

a,double

b,double

eps)

{

return

asr(a,b,eps,simpson(a,b));

}

int

main()

{

scanf("%lf",&s);

printf("%lf\n",asr(0,1e2,1e-10));

return

0;

}

最基础的思路,是逐个求阶乘,并累加。不过由于阶乘是从1乘到n,所以每个数都单独求一次阶乘,会有很多重复运算,影响效率。

所以更快捷的方式是,在上一个数的阶乘基础上,直接乘上本身,得到当前数的阶乘。

以此为主导,代码如下:

#include <stdioh>

int main()

{

int n, i, n1 = 1,s=0;

scanf("%d",&n);//输入n值。

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

{

n1=i;//计算i的阶乘。

s+=n1;//累加。

}

printf("%d\n", s);//输出结果。

}

写的一个C++实现10000的阶乘的代码

#include<iostream>

#define N 10000//设阶乘数为10000

#define SIZE 40000//预留40000位保存结果

using namespace std;

void mul(int n1,int n2)//两数相乘

{

for(int i=0;i!=SIZE;++i)

n1[i]=n2;

for(int i=0;i!=SIZE;++i){

n1[i+1]+=(n1[i]/10);

n1[i]%=10;

}

}

int main()

{

int num=new int[SIZE];

memset(num,0,SIZE);

num[0]=1;

//N的阶乘

for(int i=1;i!=N+1;++i){

mul(num,i);

}

//输出时排除开头的0

for(int i=SIZE-1;i!=-1;--i){

if(0!=num[i]){

for(int j=i;j!=-1;--j){

cout <<num[j];

}

break;

}

}

delete[] num;

return 0;

}

很多地方不合理,尤其是需要预留空间,这就要我先预算一下会有多少位了。运算时间20秒左右,效率也不行,应该在10秒左右比较合理,机器为P3 733,内存256MB。

#include "stdafxh"

long fun(int);

int main(int argc, char argv[])

{

for(int i=1;i<11;i++)

{

    printf("%d!=%ld\n",i,fun(i));

}

return 0;

}

long fun(int m)

{

   long sum=0;

   if(m<0)

   {

       printf("m<0,不能求阶乘!\n");

   }

   else if(m==0)

   {

       sum=1;

   }

   else

   {

      sum=mfun(m-1);   

   }

   return sum;

}

以上就是关于C语言编程 输入N 求N的阶乘全部的内容,包括:C语言编程 输入N 求N的阶乘、c语言求阶乘的函数、c语言求1到n的阶乘的和等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10218454.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-06
下一篇 2023-05-06

发表评论

登录后才能评论

评论列表(0条)

保存