黑马程序员技术交流社区

标题: 阶乘和的问题还有别的解决方法吗? [打印本页]

作者: 花短裤的夏天    时间: 2015-4-14 23:50
标题: 阶乘和的问题还有别的解决方法吗?
题目:
编写一个函数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;
}
>
除了老师给的答案,大家还有别的简便的方法吗?


作者: senheima    时间: 2015-4-14 23:53
#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;
}
作者: bieny    时间: 2015-4-14 23:53
我的是阶乘
  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. }
复制代码



作者: 丶浩浩丶    时间: 2015-4-14 23:55
  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. }
复制代码

作者: 老树    时间: 2015-4-15 00:03
//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;
}
作者: 泡沫小精灵    时间: 2015-4-15 00:04
还可以用for循环实现
作者: yesha    时间: 2015-4-15 00:17
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
yesha 发表于 2015-4-15 00:17
int pieAdd(int n);
int main(){
    int x;

第二个方法是函数嵌套调用,第三个是递归没做出来
作者: oucding    时间: 2015-4-15 00:27
#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;
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2