输入一个正整数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的阶乘的和等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)