C++ 正数和负数的总和

C++ 正数和负数的总和,c++,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++) {

我有一个家庭作业要做这个序列的求和算法:
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;
}
intmain(){
int num,N,k;
双S;
cout>N;

对于循环中的(num=1,k=0,S=1;num),您有以下内容

k=+2;
因此,每次迭代都将值2赋给
k

k+=2;

还要注意另一个答案中突出显示的整数除法问题

试试
1./k
——否则,1除以任何整数都将产生零。(请参阅另一个关于
=+
vs
+=
打字错误的答案)


不要忘记,如果
k
为零,则会产生无穷大。@Electro是的,但他的循环代码不允许零为零value@jack23-再次感谢,它现在起作用了:你用语言承认这个答案是正确的。所以你应该接受这个答案。接受的问题是有两个答案指出了不同的问题;-)我会投票给@MathematicalIAN1975,因为他的代表性较低。@MichaelKrelin hacker事实上我认为他应该接受你的答案,因为整数除法对于新手来说是一个常见的陷阱,你的答案可能对未来的访问者更有用。每当
(num*2)
大于分子时,这仍然存在整数除法问题(在这种情况下,1)“Asad,不,和是非整数,不利于除法。”迈克尔克林林黑客我假设问题是由结果被舍入到整数的事实。这怎么可能是固定的?(以前没有使用C++,所以我为NoObess道歉)不是除法的两边都应该是整数,其中一个应该是双精度的,因此
num
应该是双精度的(这使
num+2
成为双精度的),或者
1
(可以通过键入
1.0
来解决),这是双精度的。顺便说一句,关于缩短时间(我认为这是你的目标之一,我觉得很好)
sum+=(1.-2*(num%2))/(2*num)
而不是
if
;-)这是关于玩的,不是一个正确的答案,tho;-)
for(num = 1, sum = 1; num <=N; num++){
    if(num%2==0){
        sum += 1/(num*2);
    }else{
        sum -= 1/(num*2);
    }
}
for(num = 1, sum = 1; num <=N; num++){
    if(num%2==0){
        sum += 1.0/(num*2);
    }else{
        sum -= 1.0/(num*2);
    }
}