回 帖 发 新 帖 刷新版面

主题:[求助]一道简单的题

求n的阶层(n<100)
例:
5!=5×4×3×2×1
谢谢啦!

回复列表 (共25个回复)

21 楼

var
i,j:integer;
begin
j:=1;
read(i);
for i:=i dowento 1 do
j:=j*i;
writeln(j);
end.

22 楼

竟然有这么多的人回,谢谢了!
(不过现在我看来这题目有些弱智了)

23 楼


2楼的算法太过简单了吧,100的阶乘肯定超过了integer,longint等的范围.
所以要用人工模拟乘法的方法去做,并且要用到字符串.
具体的程序我现在没写好,过几天一定交上......

24 楼


强[em2]

25 楼

这是用C写的,要转换成Pascal也不难。

#include <stdio.h>
#include <stdlib.h>
/*计算任意一个100以内的数的阶乘*/
int turn(int x,int y[201]);
int multi(int x[201],int y,int z[201]);
int place(int m[201]);

int main()
{
    int n,i,j,b,p;
    long s,s10;
    int a[201]={0},s1[201]={0};

    printf ("input n:");
    scanf("%d",&n);

    if(n>100)printf("the number is out of range!");
    else{

    s=1;
    if (n<=10){                   /*当N小于10时,直接计算*/
        for (i=1;i<=n;i++)s=s*i;
        }
    else{
    s10=1;
    for (i=1;i<=10;i++)s10=s10*i;
    turn(s10,a);/*将S10存入数组a中*/
    b=11;
    while(b<=n){
        multi(a,b,s1);
        for(j=1;j<=200;j++){a[j]=s1[j];}/*进行模拟乘法计算*/
        b++;
        }
    }

    printf("result:");
    if(s!=1)printf("%ld",s);
    else {
        p=place(s1);
        for (i=p;i<=200;i++)printf("%d",s1[i]);/*输出结果*/
         }

    }
    return 0;
}
int turn(int x,int y[201])/*转换函数*/
{
    int i;

    y[201]=0;

    i=200;
    while (x!=0){
        y[i]=x % 10;
        i--;
        x=x/10;
        }
    }
int multi(int x[201],int y,int z[201]){/*乘法模拟函数*/
    int place(int m[201]);

    int y1,y2,cur1,cur2,cur,i;
    int x1[201]={0},x2[201]={0};
    y1=y/10;y2=y%10;

    cur1=0;cur2=0;cur=0;

    for (i=200;i>=place(x);i--){
        x1[i]=(x[i]*y2+cur2)%10;
        cur2=(x[i]*y2+cur2)/10;
        x2[i-1]=(x[i]*y1+cur1)%10;
        cur1=(x[i]*y1+cur1)/10;
        }
        x1[i-1]=cur2;x[i-2]=cur1;
     for(i=200;i>=place(x2);i--){
         z[i]=(x1[i]+x2[i]+cur)%10;
         cur=(x1[i]+x2[i]+cur)/10;
         }
         z[i-1]=cur;

    }

int place(int m[201]){/*定位函数*/
    int i;
        for(i=1;i<=200;i++){
            if (m[i]!=0){
                return i;
                break;
                }
                }
        }

我来回复

您尚未登录,请登录后再回复。点此登录或注册