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

课后习题求帮助。

fl8962 发布于 2012-10-17 18:16, 293 次点击
求1到20的阶乘之和,1!+2!。。。。。+20!;
#include<stdio.h>
void main()
{
    int i,j;
   long int sum,term;
    sum==0;
    for(i=2;i<=21;i++)
     {   term=1;
     for(j=1;j<i;j++)
     {
         term=term*j;
     }
     sum=sum+term;
    }
    printf("%ld\n",sum);
   
}
这是我写的程序但是运行有错误,求各位大侠帮忙指点错在哪里?万分感谢。
5 回复
#2
小小小火柴2012-10-17 19:04
#include<stdio.h>
void main()
{
    int i,j;
   long  sum,term;
    sum=0;
    for(i=2;i<=21;i++)
     {   term=1;
     for(j=1;j<i;j++)
     {
         term=term*j;
     }
     sum=sum+term;
    }
    printf("%ld\n",sum);
   
}
你的赋值语句sum=0;错了!还有定义语句 long int sum;现在可以了!
#3
fl89622012-10-18 21:38
回复 楼主 fl8962
谢谢万分感谢!!
#4
lchpersonal2012-10-19 10:53
用递归做更好:
#include<stdio.h>
#include <Windows.h>
using namespace std;

long recurrence(int n){          // n是你要求递归的那个数
    if(n==0)return 1;
    else return n*recurrence(n-1);
}
int main(){
     int m;
    long sum=0;
scanf("%d\n",&m);
for(int i=0;i<=m;i++){
sum +=recurrence(i);
}
    printf("%ld\n",sum);
    system("pause");
    return 0;
}

[ 本帖最后由 lchpersonal 于 2012-10-19 10:57 编辑 ]
#5
rjsp2012-10-19 12:30
递归永远是最差的算法,本来不想回的
程序代码:
#include <stdio.h>

int main()
{
    unsigned long long n = 0;
    unsigned long long t = 1;
    for( size_t i=1; i<=20; ++i,t*=i )
        n += t;
    printf( "%lld\n", n ); // 输出2561327494111820313

    return 0;
}

#6
liman1232012-10-19 12:34
sum=0。不要用“==”后者是用于判断语句中的
1