用C++计算和

Str*_*247 2 c++ sum series

我写了下面的代码来总结系列(-1)^i*(i/(i+1)).但是当我运行它时,我得到-1n的任何值.

有人可以指出我做错了什么吗?先感谢您!

#include <iostream>
using namespace std;

int main()
{
    int sum = 0;
    int i = 1.0;
    int n = 5.0;

    for(i=1;i<=n;i++)
        sum = (-1)^i*(i/(i+1));

    cout << "Sum" <<" = "<< sum << endl;
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

Mys*_*ial 14

问题#1: C++ ^运算符不是数学运算符.这是一个按位异或.

你应该使用pow().

问题2: 您将浮点类型存储为整数类型.所以以下将导致整数除法(截断除法):

i/(i+1)
Run Code Online (Sandbox Code Playgroud)

问题3: 你实际上并没有总结任何东西:

sum = ...
Run Code Online (Sandbox Code Playgroud)

应该:

sum += ...
Run Code Online (Sandbox Code Playgroud)

更正版本的代码如下:

double sum = 0;
int i = 1;
int n = 5;

for(i = 1; i <= n; i++)
    sum += pow(-1.,(double)i) * ((double)i / (i + 1));
Run Code Online (Sandbox Code Playgroud)

虽然你真的不需要pow在这种情况下使用.奇数/偶数的简单测试就可以了.

double sum = 0;
int i = 1;
int n = 5;

for(i = 1; i <= n; i++){
    double val = (double)i / (i + 1);
    if (i % 2 != 0){
        val *= -1.;
    }
    sum += val;
}
Run Code Online (Sandbox Code Playgroud)