我写了下面的代码来总结系列(-1)^i*(i/(i+1))
.但是当我运行它时,我得到-1
n的任何值.
有人可以指出我做错了什么吗?先感谢您!
#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)