回 帖 发 新 帖 刷新版面

主题:求1000以内任意数的阶乘

这道题可以说是非常经典的一题了,我也知道要用数组来完成这一个程序,但有些东西还是想不清楚,请知道的兄弟给我讲讲!

回复列表 (共7个回复)

沙发

参见我blog的文章:   阶乘的算法
http://sniper167.bokee.com

板凳


用什么语言实现呀

3 楼

也不知道兄弟是哪方面想不清楚,我就依我的想法编了个程给兄弟参考,下面的很简单,相信可以搞懂的:
#include<stdio.h>
void main()
{
    int n;  
    double f(int a),fact;  //声明函数f(),定义变量fact用于存放f()返回的值。
    printf("输入要求的数:\n");
    scanf("%d",&n);
    fact=f(n);
    printf("%d的阶乘为%.0f!\n",n,fact);
}
double f(int a)            //函数调用
{
    if(a==1)
        return(1);
    else
        return a*f(a-1);
}

4 楼

[quote]也不知道兄弟是哪方面想不清楚,我就依我的想法编了个程给兄弟参考,下面的很简单,相信可以搞懂的:
#include<stdio.h>
void&nbsp;main()
{
&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;n;&nbsp;&nbsp;
&nbsp;&nbsp;&nbsp;&nbsp;double&nbsp;f(int&nbsp;a),fact;&nbsp;&nbsp;//声明函数f(),定义变量fact用于存放f()返回的值。
&nbsp;&nbsp;&nbsp;&nbsp;printf("输入要求的数:\n");
&nbsp;&nbsp;&nbsp;&nbsp;scanf("%d",&n);
&nbsp;&nbsp;&nbsp;&nbsp;fact=f(n);
&nbsp;&nbsp;&nbsp;&nbsp;printf("%d的阶乘为%.0f!\n",n,fact);
}
double&nbsp;f(int&nbsp;a)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//函数调用
{
&nbsp;&nbsp;&nbsp;&nbsp;if(a==1)
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(1);
&nbsp;&nbsp;&nbsp;&nbsp;else
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;a*f(a-1);
}[/quote]
是你没有看清出楼主的题目。1000!不是你的程序可以算出来的

5 楼

可以看看这个网站( blog.csdn.net/liangbch), 内有大数阶乘的最详尽的算法讨论和代码。

6 楼

#include "iostream.h"
void main()
{
   int n,i,m=0,x;
   cin>>n;
ff:x=1;
   for(i=1;i<=1000;i++)
       x=x*i;
       m=m+x;
       if(n>1)
       {
           n--;
           goto ff;
       }
   cout<<m<<endl;
}

7 楼


这是转载一个高手写的……

**********************************************************************************************************
#include <stdio.h>

int main(void)
{
    int Data[10000];
    int digit;
    int i,j,r,k;
    int N;
    
    for(i=1;i<10000+1;i++)
       Data[i]=0;
    Data[0]=1;
    Data[1]=1;
    digit=1;
    
    printf("Enter a number what you want to calculus:");
    scanf("%d",&N);
    
    for(i=1;i<N+1;i++)
    {
        for(j=1;j<digit+1;j++)
            Data[j]*=i;
        for(j=1;j<digit+1;j++)
        {
            if(Data[j]>10)
            {
                for(r=1;r<digit+1;r++)
                {
                    if(Data[digit]>9)
                        digit++;
                    Data[r+1]+=Data[r]/10;
                    Data[r]=Data[r]%10;
                }
            }
        }
    }
    printf("%d!=",N);
    for(k=digit;k>0;k--)
        printf("%d",Data[k]);
    return 0;
}

我来回复

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