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

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

#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;
}

最佳答案

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

您应该改用 pow()

问题 #2:
您将浮点类型存储为整数类型。所以以下将导致 integer division (truncated division) :

i/(i+1)

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

应该:
sum += ...

代码的更正版本如下:
double sum = 0;
int i = 1;
int n = 5;

for(i = 1; i <= n; i++)
    sum += pow(-1.,(double)i) * ((double)i / (i + 1));

虽然在这种情况下你真的不需要使用 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;
}

关于c++ - 用 C++ 计算总和,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/9134928/

10-09 04:18