我编写了以下代码来总结系列 (-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/