求和一系列正负分数

时间:2012-11-03 11:42:46

标签: c++

我有一个功课来制作一个算法来对这个序列求和:S = 1 - 1/2 + 1/4 - 1/6 + 1/8 - 1/10 + ... + 1/2n如果用户输入2则总和将是1 - 1/2 = 1/2等等。

这是我的编码:

int main() {

    int num, N, k;
    double S;
    cout << "enter the sequence : ";
    cin >> N;
    for (num = 1, k = 0, S = 1; num <=N; num++) {
        num++;
        k=+2;
        if (num % 2 == 0) {
            S -= 1/k;
        } else {
            S += 1/k;
        }
    }
    cout << "The sum is " << S;
    system("PAUSE");
    return 0;
}

我很困惑为什么总和总是指1?任何人都可以向我解释为什么会发生这种情况吗?

3 个答案:

答案 0 :(得分:7)

尝试1./k - 否则1的整数除法将产生零。 (并查看有关=+ vs +=拼写错误的其他答案。)

答案 1 :(得分:3)

在你的循环中你有这个

k=+2;

所以每次迭代都要将值2赋值给k。你可能想要

k+=2;

还要注意其他答案中突出显示的整数除法问题

答案 2 :(得分:1)

for(num = 1, sum = 1; num <=N; num++){
    if(num%2==0){
        sum += 1/(num*2);
    }else{
        sum -= 1/(num*2);
    }
}

如果你的序列中的第n个术语是(1/((n-1)*2)),那应该这样做。

编辑:如下所述,在执行除法时,其中一个操作数需要是非整数,以防止结果为整数。对我上述尝试的更正将是:

for(num = 1, sum = 1; num <=N; num++){
    if(num%2==0){
        sum += 1.0/(num*2);
    }else{
        sum -= 1.0/(num*2);
    }
}

http://codepad.org/KgGAxKxS