C++ 正数和负数的总和
我有一个家庭作业要做这个序列的求和算法:C++ 正数和负数的总和,c++,C++,我有一个家庭作业要做这个序列的求和算法:S=1-1/2+1/4-1/6+1/8-1/10+…+1/2n如果用户输入2,总和将为1-1/2=1/2等 这是我的代码: int main() { int num, N, k; double S; cout << "enter the sequence : "; cin >> N; for (num = 1, k = 0, S = 1; num <=N; num++) {
S=1-1/2+1/4-1/6+1/8-1/10+…+1/2n
如果用户输入2,总和将为1-1/2=1/2
等
这是我的代码:
int main() {
int num, N, k;
double S;
cout << "enter the sequence : ";
cin >> N;
for (num = 1, k = 0, S = 1; num <=N; num++) {
num++;
k=+2;
if (num % 2 == 0) {
S -= 1/k;
} else {
S += 1/k;
}
}
cout << "The sum is " << S;
system("PAUSE");
return 0;
}
intmain(){
int num,N,k;
双S;
cout>N;
对于循环中的(num=1,k=0,S=1;num),您有以下内容
k=+2;
因此,每次迭代都将值2赋给k
k+=2;
还要注意另一个答案中突出显示的整数除法问题试试1./k
——否则,1除以任何整数都将产生零。(请参阅另一个关于=+
vs+=
打字错误的答案)
不要忘记,如果k
为零,则会产生无穷大。@Electro是的,但他的循环代码不允许零为零value@jack23-再次感谢,它现在起作用了:你用语言承认这个答案是正确的。所以你应该接受这个答案。接受的问题是有两个答案指出了不同的问题;-)我会投票给@MathematicalIAN1975,因为他的代表性较低。@MichaelKrelin hacker事实上我认为他应该接受你的答案,因为整数除法对于新手来说是一个常见的陷阱,你的答案可能对未来的访问者更有用。每当(num*2)
大于分子时,这仍然存在整数除法问题(在这种情况下,1)“Asad,不,和是非整数,不利于除法。”迈克尔克林林黑客我假设问题是由结果被舍入到整数的事实。这怎么可能是固定的?(以前没有使用C++,所以我为NoObess道歉)不是除法的两边都应该是整数,其中一个应该是双精度的,因此num
应该是双精度的(这使num+2
成为双精度的),或者1
(可以通过键入1.0
来解决),这是双精度的。顺便说一句,关于缩短时间(我认为这是你的目标之一,我觉得很好)sum+=(1.-2*(num%2))/(2*num)
而不是if
;-)这是关于玩的,不是一个正确的答案,tho;-)
for(num = 1, sum = 1; num <=N; num++){
if(num%2==0){
sum += 1/(num*2);
}else{
sum -= 1/(num*2);
}
}
for(num = 1, sum = 1; num <=N; num++){
if(num%2==0){
sum += 1.0/(num*2);
}else{
sum -= 1.0/(num*2);
}
}