=1000 THEN PR "请输入不大于999的数! STOPMAKE "PRECISION"> 阶乘计算机阶乘logo语言_专业知识_大学时代

阶乘计算机阶乘logo语言

阶乘计算机阶乘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!”的值是多少?】#includeint main(){    int n, x;        for(n = x = 1; n <= 10; ++n) {        x *= n;        printf("%d %d ", n, x);    }                return 0;}/*10!:3628800*/Pascal中program test;varn:longint;function jc(n:longint):qword;begin if n=0 then jc:=1 else jc:=n*jc(n-1)end;begin readln (n); writeln (jc(n))end.C++ 中#includeusing namespace std;long long f(int n){    long long e=1;    if(n>0)    e=n*f(n-1);    cout<#includedouble s;const double e=exp(1.0);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)+4*F(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)<=15*eps) return L+R+(L+R-A)/15.0;    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 ",asr(0,1e2,1e-10));    return 0;} JAVA 中public class Main{ final static int MAX=20;// 可以替换 MAX 的值

    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(i1){return $n*jc($n-1);}else{return 1;}}echo jc(3);JavaScript 阶乘function factorial(num){    if (num <= 1)        return 1;    else        return num * arguments.callee(num - 1);};汇编中的阶乘算法.286.model small,stdcallFactorial PROTO :WORD.stack 200h.data    f_n WORD 6    result WORD ?.CODESTART:    mov ax,@data    mov ds,ax    mov es,ax    invoke Factorial,f_n    mov result,ax    mov ah,4ch    int 21h    ;计算阶乘    ;输入参数:[ebp+8] = n, 需要计算的数字    ;返回参数:eax = n的阶乘    Factorial PROC near uses bx,fn    mov ax,fn    cmp ax,0    ja L1    mov ax,1    jmp L2    L1:    dec ax    invoke Factorial,ax    ReturnFact:    mov bx,fn    mul bx    L2:    retFactorial ENDPEND START

以上内容由大学时代综合整理自互联网,实际情况请以官方资料为准。

相关