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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© donkey2 中级黑马   /  2014-11-12 23:30  /  1166 人查看  /  0 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 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,就出错在这一步。

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马