黑马程序员技术交流社区

标题: 1112-练习-编写求阶乘的函数 [打印本页]

作者: donkey2    时间: 2014-11-12 23:30
标题: 1112-练习-编写求阶乘的函数
本帖最后由 donkey2 于 2014-11-15 10:08 编辑

/*
题目:
编写一个函数int pieAdd(int n),计算1!+2!+3!+……+n!的值(n>=1)。
比如pieAdd(3)的返回值是1! + 2! + 3! = 1 + 1*2 + 1*2*3 = 9
*/

// 1*2*..*n 或 n(n-1)..1

#import <Foundation/Foundation.h>

int pieAdd(int n);
int n;
int sum;

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
//        NSLog(@"Hello, World!")

        NSLog(@"请输入一个正整数") ;
        scanf("%i",&n);
        sum = pieAdd(n);
        NSLog(@"计算的结果为 %i",sum);

    }
    return 0;
}

int pieAdd(int t)
{

    int result = 0;
//    1! + 2! + ...+ ...
    for (int j=1 ; j <= n; j++) {

        int k=1;

        for(int i = 1;i <= j;i++){

            //阶乘的数
            k *= i;
        }
        result +=k;
    }

    return result;


    return 0;
}


遇到的问题:
我开始把int k = 1 初始化在两个for循环的外面了,于是计算的结果怎么都不对啊。
差点哭晕在厕所!!!
特别要注意for循环中变量的生存周期啊!
假设 n = 3,定义在外面的话,大循环再次执行时,k中已经有值为2,
本来是3*2*1,结果计算机会算成3*2*2,最终结果15比正确结果大6,就出错在这一步。






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