注册 登录
编程论坛 C++教室

我好蠢好蠢好蠢

杰仔1997 发布于 2011-09-17 14:28, 1216 次点击
计算1! +2!+3!+4!+......+20! 我不明白“!”是什么??? 讲下计算原理罗
14 回复
#2
rjsp2011-09-17 16:13
等你上了小学就会听到“阶乘”的知识了,上了初中就会学到“阶乘”的知识了

知识和智慧是两回事,你不知道阶乘是没知识,无法证明你蠢
#3
xg56992011-09-17 16:17
我也很蠢,不明白你的问题中!带表什么意思
#4
nicum2011-09-17 19:51
#include<iostream>
using namespace std;
int main()
{
    int i=1,sum=0,temp=1;
    while(i<20)
    {
        temp*=i;//计算i的阶乘
        sum+=temp;//阶乘求和
        i++;
    }
    return 0;
}
#5
lianjiecuowu2011-09-17 23:02
就是指阶乘的意思了,从这个数字一直乘到i为止
#6
lianjiecuowu2011-09-17 23:03
#include<iostream>
using namespace std;
int main()
{
    int i=1,sum=0,temp=1;
    while(i<20)
    {
        temp*=i;//计算i的阶乘
        sum+=temp;//阶乘求和
        i++;
    }
    return 0;

上面的完全正确
#7
玩出来的代码2011-09-18 10:48
,1到20的阶乘和32位的int貌似是存不下的。
#8
杰仔19972011-09-19 13:12
我运行了楼上的程序,但什么都没哦??
#9
nicum2011-09-19 21:39
不好意思,没仔细看题,上面的代码没输出,换一个


#include<iostream>
using namespace std;

int main()
{
    int i=1;
    __int64 sum=0,temp=1;
    while(i<=20)
    {
        temp*=i;
        sum+=temp;
        i++;
    }
    for(i=1;i<20;i++)
        cout<<i<<"!+";
    cout<<"20!="<<sum<<endl;

    return 0;
}
#10
nicum2011-09-19 21:40
楼主给分呀
#11
清风一然2011-09-19 22:36
楼上用的是C++,我就用我们学过的C吧
#include<stdio.h>
int main()
{
  double s=0.t=1;
  int n;
  for(n=1;n<=20;n++)
  {
    t=t*n;
    s=s+t;
   }
 printf("1!+2!+3!+...+20!=%22.15e\n",s)
 return 0;
}
#12
杰仔19972011-09-21 12:46
无法给分啊。程序是错的
#13
czsbc2011-09-21 20:32
用C语言写几个函数,算到200没有问题,再大的时间太长了。
程序代码:
#include<stdio.h>
#include<stdlib.h>
#include<memory.h>
int result[10000];
int mul(int *a,int *b,int *c,int m,int n)
{
    int i,j,k,carry=0,sum;
    for(i=0;i<m+n-1;i++)
    {
        sum=0;
        for(j=0;j<m;j++)
            for(k=0;k<n;k++)
            {
                if(j+k==i)
                    sum+=a[j]*b[k];
            }
        sum+=carry;
        c[i]=sum%10;
        carry=sum/10;
    }
    if(carry)
    {
        c[i]=carry;
        return (m+n);
    }
    else
        return (m+n-1);
}
int factorial(int * ret,int n)
{
    int num[5];
    int temp[10000]={1};
    int i,j=0,k=1,m,d;
    for(i=1;i<=n;i++)
    {
        d=i;
        while(d)
        {
            num[j++]=d%10;
            d/=10;
        }
        k=mul(temp,num,ret,k,j);
        for(m=0;m<k;m++)
            temp[m]=ret[m];
        j=0;
    }
    return k;
}
int add(int *a,int *b,int m)
{
    int i;
    int carry=0,sum;
    for(i=0;i<m;i++)
    {
        sum=a[i]+b[i]+carry;
        a[i]=sum%10;
        carry=sum/10;
    }
    if(carry)
    {
        a[i]=carry;
        return (m+1);
    }
    else
        return m;
}
int factorSum(int * ret,int n)
{
    int temp[10000]={0},i,k,m=0,max=0;
    for(i=1;i<=n;i++)
    {
        k=factorial(temp,i);
        max=k>m?k:m;
        m=add(ret,temp,max);
    }
    return m;
}
int main()
{
    int i;
    int n=factorSum(result,20);
    for(i=n;i>0;i--)
        printf("%d",result[i-1]);
    printf("\n");
    return 0;
}






#14
Cai_xw19932011-09-22 15:57
观望中..得分走人
#15
fangzehao1232011-09-22 17:21
例如:1+1*2+1*2*3+1*2*3*4+1*2*3*4*5+……+N=!n
1