编程阶乘问题
⑴ 编程阶乘问题
说实话,没有计算阶乘的公式,也没有简便方法,只是硬算,也可以运用计算机,可以计算到65!,如果你想计算跟大的数,我建议你上网络寻找计算阶乘的软件,听说多大的数都能计算出来。
还有这个参考:
由于阶乘运没清算的增长速度特别快(比2^n的增长速度快),对于较小整数的阶乘运算采用简单的递规算法可以实现,但是对于大整数的乘法(比如1000!),则传统的递规算法就失去了作用。
由于本人的水平不高,用下列拙劣的方式实现,请高人多多指教。具体如下:定义一个很长的数组,用数组的每一项表示计算结果的每一位。例如,7!=5040,a[1000],则a[0]=0,a[1]=4,a[2]=0,a[3]=5。
程序源代码:
/**
*计算大数的阶乘,算法的主要思想就是将计算结果的每一位用数组的一位来表示:如要计算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;
}
}
public static void main(String[] args)
{
String num = args[0];
int count = 0;
int n = Integer.parseInt(num);
f(n);
for(int i= a[0]; i>笑塌0; i--)
{
count++;
System.out.print(/*"a[" + i + "]=" + */a[i]/* + " "*/);
}
System.out.println("\n"+count);
}
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=528778
参考资料:http://blog.csdn.net/hengshan/archive/2005/11/13/528778.aspx
⑵ c语言编程 输入N 求N的阶乘
输入一个正整数n,输出n!*/#include <stdio.h> //编译预处理命令
int factorial(int n); //函数声明
int main(int argc, char const *argv[]) //主函数
{
int n; //变量定义
scanf("%d", &n); //输入一个整数
printf("%d
", factorial(n)); //调用函数计算阶乘
return 0;
}int factorial(int n) //定义计算n!的函数
{
int fact = 1;
for (int i = 1; i <= n; ++i)
{
fact = fact*i;
}
return fact;
}
拓展资料
特点
1. C语言是高级语言。它把高级语言的基本结构和语句与低级语言的实用性结合起来。C 语言可以像汇编语言一样对位、字节和地址进行操作,而这三者是计算机最基本的工作单元。
2.C语言是结构式语言。结构式语言的显着特点是代码及数据的分隔化,即程序的各个部分除了必要的信息交流外彼此独立。这种结构化方式可使程序层次清晰,便于使用、维护以及调试。C 语言是以函数形式提供给用户的,这些函数可方便的调用,并具有多种循环、条件语句控制程序流向,从而使程序完全结构化。
3.C语言功能齐全。具有各种各样的数据类型,并引入了指针概念,可使程序效率更高。而且计算功能、逻辑判断功能也比较强大。
4. C语言适用范围大。适合于多种操作系统,如Windows、DOS、UNIX、LINUX等等;也适用于多种机型。C语言对编写需要硬件进行操作的场合,明显优于其它高级语言,有一些大型应用软件也是用C语言编写的。
⑶ 用c语言编程,求从1的阶乘一直加到20的阶乘。
1、首先打开C语言编辑器,新建一个c语言的文件,导入头文件并设置一个主函数:
⑷ 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++求编程n的阶乘
首先,是main,不是mail。
其次,本程序中是使用的是递归函数来实现n的阶乘,因为在具体的计算判携源机上实现的时候,递归是由栈(一种数据的组织形式)来实现的,而栈的大小是受限于计隐侍算机的可用空间的。所以,在计算n的阶乘时,当n较大,在计算时可能会出现空间不足不能进行计算的情况,这种情况下,会返回result的值为0.提醒程序的使用者,本次计算结果不对,请检查程序或者输入数据。
最后,如果上面掘态这段看不懂也没有关系,你可以输入一个足够大的数来测试一下,当result初值是否为0对程序有什么影响。只有你自己试了,才能真正的掌握它。
⑹ 求一道C语言编程题:求n的阶乘
思路:所谓n的阶乘就是从1到n的累积,所以可以通过一个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\n",s);
return 0;
}
/*
运行结果:(例如求5的阶乘)
5
120
*/
⑺ C语言编程 N的阶乘
#include<stdio.h>
int main()
{
int n,i,f=1;
printf("请输入一个整数:");
scanf("%d",&n);
for(i=2;i<=n;i++)
f*=i;
printf("%d!=%d ",n,f);
getch();
return 0;
}
⑻ 编程求阶乘的问题
在这段代码中,外层循环的目的是依次枚举从1到5一共5个数字,存入变量j;内层循环的作用是求j的阶乘,结果保存为变量a,然后把a累加到变量n。
求阶乘需要从1开始,沿自然数列依次向上乘,结果累乘到变量a,所以每次内层循环开始时变量a必须被重置成1,否则求下一个数字的阶乘时就不是从1开始计算了。
希望LZ能明白。
⑼ c语言如何求N的阶乘
法/步骤
第一步、编程的第一步就是写头文件,对于初学者来说,只写一个头文件就可以了,即#include<stdio.h>
拓展资料
定义
n!=1×2×3...xn
n!=X×(X-1)×(X-2)...×1
1751年,欧拉以大写字母M表示m阶乘M=1x2x3...x...m
1799年,鲁非尼在他出版的方程论着述中,则以小写字母π表示m阶乘。而在1813年,高斯则以Π(n)来表示n阶乘。而用来表示n阶乘的方法起源于英国,但仍未能确定始创人是谁。直至1827年,由于雅莱特的建议而得到流行,现在有时也会以这个符号作为阶乘符号。
当n较大时,直接计算n!变得不可能,这时可通过斯特灵(Stirling)公式计算近似算或取得大小范围。