2016-02-27 137 views
-3

试图使用此for循环来输入循环应该运行多少次。每循环运行一次,它应该减去或增加总和,分母每改变一次循环就会改变+2。不能为了我的生活找出它为什么不起作用。当输入大于10时,我得到的答案是负的,当它应该在pi上振荡时。对嵌套if语句使用for循环总和#

#include <iostream> 
using std::cout; 
using std::cin; 
using std::endl; 

enter code here 

int main() 
{ 
int input = -100; 
double sumTotal = 4, denominator = 3; 

    while (input < 0) 
    { 
     cout << "Enter Max value of k in truncated series (non-negative): " << endl; 
     cin >> input; 
    } 
    if (input == 0) 
    { 
     sum = 4.0/1.0; 
    } 

    for (int i = 2; i < input+2; i++) 
    { 


     if (i%2==0) 
     { 
      sumTotal -= static_cast<double>(4.0)/denominator; 

     } 
     else 
     { 
      sumTotal += static_cast<double>(4.0)/denominator; 

     } 


     denominator + static_cast<double>(2); 

    } 

    cout << sumTotal << endl; 


return 0; 

}

+1

'4.0' **是**双,为什么你在这里使用剧组? –

+0

因为我不确定该部门的工作方式。我读过其他地方,一个整数除以2会导致问题,所以我想确保它是一个双。 –

+0

整数不能有小数部分 –

回答

0

首先第一件事情:在static_cast是你正在做的是不必要的。在C++中,格式为1.0的文字默认为double。即使你使用浮动后缀,即1.0f,编译器仍然会做正确的事情。其次,虽然我不熟悉你正在实现的算法,但我敢打赌问题在这里:denominator + static_cast<double>(2);。此声明对denominator的值没有影响。

你可能需要这样做:

denominator = denominator + 2; 

或者,

denominator += 2; 

的预期效果是修改的denominator的价值循环的下一个迭代,所以你必须将新的价值denominator

而且,似乎没有任何不同之间:和

for (int i = 2; i < input + 2; ++i) { 
    ... 
} 

for (int i = 0; i < input; ++i) { 
    ... 
} 

因此,我建议你开始索引变量在0可读性的缘故。

+0

谢谢!我担心0%2或1%2不等于0.这就是为什么我加了+2。 –

+0

有没有办法让我做出回答? –

+1

当然,在我的答案的左边应该有一个大的0和低于一个圆圈中的复选标记。点击圆圈标记我的答案。 –