=1000 THEN PR "请输入不大于999的数! STOPMAKE "PRECISION">
阶乘计算机阶乘Logo 语言Logo 语言因为是少儿的学习语言,阶乘方法要复杂一些,而且时间较慢,下面是低精度、高精度、统计位数的阶乘算法:TO DJDJC :N ;低精度阶乘MAKE "S 1;累乘器开始的值是1FOR "I 1 :N[MAKE "S :S * :I](PR :N [!=] :S)ENDTO GJDJC :N;高精度阶乘IF :N>=1000 THEN PR "请输入不大于999的数! STOPMAKE "PRECISION 6;计算显示位数设定为六位MAKE "A ARRAY 860;定义数组空间0-859组ASET :A 1 1;乘法数组第1空间赋值为1FOR "I 2 859[ASET :A :I 0] ;其他数组空间赋值为0FOR "I 1 :N [JC :I];调用阶乘过程MAKE "K 0;数组空间是0的标记MAKE "Z 0;总共有多少组数字的标记MAKE "WS 0;累加总共有多少位的计数器TYPE :N TYPE[!=];从高位到低位显示计算结果FOR "M 1 859[XXS 860-:M]PR[ ] TYPE[这是一个]TYPE :WS TYPE[位数]PRENDTO JC :I;计算阶乘的过程FOR "J 1 858[CF :I :J] ;对所有数组空间逐一计算乘法FOR "J 1 858[CLJW :J];处理乘法过程中的进位ENDTO CF :I :J ;计算乘法的过程MAKE "ZJ AGET :A :JMAKE "ZJ :ZJ * :I;I是阶乘中需要累乘的数ASET :A :J :ZJENDTO CLJW :J;处理进位的过程MAKE "X AGET :A :JIF :X<1000 THEN GO "XXX;处理没有进位的数组MAKE "JINWEI INT (:X / 1000);截取小于1000的尾数MAKE "WEISHU :X - :JINWEI * 1000 ;截取进位的数字ASET :A :J :WEISHU;存储尾数MAKE "Y AGET :A :J+1MAKE "Y :Y + :JINWEIASET :A :J+1 :Y;向上进位LABEL "XXXENDTO XXS :P;显示计算结果的过程MAKE "NN AGET :A :PIF (AND :NN=0 :K=0) THEN[GO "END_]ELSE[MAKE "K 1 MAKE "Z :Z+1] ;避开无效数组IF :Z=1 THEN MAKE "WS :WS+(COUNT :NN) GO "UP;计算头一个有效数组的位数IF :Z>1 THEN MAKE "WS :WS+3;累计数值的总位数IF :NN < 10 THEN TYPE ;填充空位0IF :NN < 100 THEN TYPE LABEL "UPTYPE :NNLABEL "END_ ;越过开头的空数组ENDTO JC :N ;求解任意数的阶乘是多少位数MAKE "S 0;先赋值位数为0FOR "I 1 :N[MAKE "S :S+LOG10 :I]TYPE[:S=]PR :SENDCommon Lisp 语言在 Common Lisp 中, 可以很方便的使用更为简洁的使用递归实现阶乘:(defun factorial (n) (cond ((> n 0) (* (factorial (- n 1)) n)) ((= n 0) 1) (t (error "N is smaller than 0."))))注意:因为百度不提供任何Lisp语言的代码框,此处使用的是Python的代码框,所以关键字可能无法高亮显示Python 语言在 Python 中, 同样可以使用这种简洁方式实现阶乘的计算:def factorial(n): if(n<=1): return 1 else: return factorial(n-1) * nC语言在 C 语言中,使用循环语句可以很方便的求出阶乘的值,下面介绍一个很简单的阶乘例子
(因为网上多数是比较麻烦的方法)【计算出“ 10!”的值是多少?】#include
public static void main(String args) { int i=1; long result=1; long n=new long[MAX]; do{ result*=(i+1); System.out.println(i+1+"!="+result); n[i]=result; i++; }while(i
以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。