A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

题目:
编写一个函数int pieAdd(int n),计算1!+2!+3!+……+n!的值(n>=1)。
比如pieAdd(3)的返回值是1! + 2! + 3! = 1 + 1*2 + 1*2*3 = 9
我的答案太复杂了,如下
<
#include <stdio.h>

int ji;
int result(int n){

    if (n==1) {
        ji=1;
    }else{

        ji=result(n-1)*n;
    }
    return ji;
}

int he;
int sum(n){
    if (n==1) {
        he=1;
    }else{
        he=sum(n-1)+result(n);

    }
    return he;
}
//sum(n)=sum(n-1)+result(n)


int main(int argc, const char * argv[]) {

    he=sum(4);
    printf("%d\n",he);
    return 0;
}
>
除了老师给的答案,大家还有别的简便的方法吗?

评分

参与人数 1黑马币 +6 收起 理由
senheima + 6 神马都是浮云

查看全部评分

8 个回复

倒序浏览
#include <stdio.h>

int pieAdd(int n);
int sum = 1,sum2=0;

int main()
{
pieAdd(4);
return 0;
}

int pieAdd(int n)
{
for (int j=1; j<=n; j++)
{
//    printf("sum%d\n",sum);
sum=1;
for (int i=1; i<=j; i++)
{
sum=sum*i;
}
sum2+=sum;
printf("sum2:%d\n",sum2);

}
return 0;
}
回复 使用道具 举报
我的是阶乘
  1. int a;
  2. int pieAdd(int n)
  3. {

  4.     if(n==1)
  5.     {
  6.         return 1;
  7.     }else{
  8.         a=pieAdd(n-1)*n;
  9.     }
  10.     return a;
  11. }

  12. int main()
  13. {
  14.     int b=1;
  15.     for (int i=1; i<=4; i++) {
  16.         pieAdd(i);
  17.         b+=a;
  18.     }

  19. printf("%d\n",b);
  20. return 0;
  21. }
复制代码


回复 使用道具 举报
  1. #include <stdio.h>
  2. int pieAdd(int n);

  3. int main(int argc, const char * argv[])
  4. {
  5.    
  6.    int s =  pieAdd(5);
  7.    
  8.     printf("%d\n",s);
  9.    
  10.     return 0;
  11. }

  12. int pieAdd(int n)
  13. {
  14.     int ji = 1;
  15.    
  16.     int sum = 0;
  17.    
  18.     for (int i = 1; i<=n; i++)
  19.     {
  20.         ji = ji * i;
  21.         sum = ji + sum;
  22.     }
  23.     return sum;
  24. }
复制代码
回复 使用道具 举报
//3.while循环
#include <stdio.h>

int main()
{
    int n=0;
    printf("请输入:\n");
    scanf("%d",&n);
   
    int sum=0;//总和
    int count=1;//次数
    int pieMulti=1;
   
    while (count<=n) {
        sum+=pieMulti;
        count++;
        pieMulti=pieMulti*count;
    }
    printf("%d\n",sum);
    return 0;
}
回复 使用道具 举报
还可以用for循环实现
回复 使用道具 举报
yesha 中级黑马 2015-4-15 00:17:52
7#
int pieAdd(int n);
int main(){
    int x;
    printf("请输入一个正整数:\n");
    scanf("%d",&x);
    int sum = pieAdd(x);
    printf("! + 2! + 3! = %d\n",sum);
   
}
int pieAdd(int n){
    if (n<1) return 0;
    int sum = 0;
    int ji=1;
    for (int j=1; j<=n; j++) {
        ji*=j;
        sum+=ji;
    }
    return sum;
}

如果是递归,需要先做一个加法函数和一个乘法函数,然后再在主函数内套用,那样也可以实现,递归还没有研究出来!
回复 使用道具 举报
yesha 中级黑马 2015-4-15 00:18:55
8#
yesha 发表于 2015-4-15 00:17
int pieAdd(int n);
int main(){
    int x;

第二个方法是函数嵌套调用,第三个是递归没做出来
回复 使用道具 举报
#include <stdio.h>
int pieAdd(int n){
    int temp = 1;
    int result = 0;
    for (int i = n; i >= 1; i--, temp = 1) {
        for (int j = i; j >= 1 ; j--) {
            temp *= j;
        }
        result += temp;
    }
    return result;
}
int main(){
    printf("结果为%d\n", pieAdd(5));
    return 0;
}
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马