对正分数和负分数序列求和

Sum a sequence of positive and negative fraction

本文关键字:求和      更新时间:2023-10-16

我有一个功课来制作一个算法来求和这个序列: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 ??谁能向我解释为什么会发生这种情况?

尝试1./k— 否则 1 除以任何值将产生零。(并查看关于=++=错别字的另一个答案)。

在你的循环中,你有这个

k=+2;

因此,您将值 2 分配给每次迭代k。你可能想要

k+=2;

还要注意另一个答案中强调的整数除法问题

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