我应该制作一个允许我进行此计算的程序: -5 + 10-20 + 40-80 + 160
到目前为止我已经这样做了:
const int START = -5, LIMIT = 160;
int somme = 0;
int terme = START;
do {
somme += terme;
terme = terme * 2;
terme = -terme;
} while(terme <= LIMIT);
printf ("equals %d\n\n", somme);
但是当我运行它时显示-215,当然这不是正确的答案。我非常感谢你的帮助。
答案 0 :(得分:1)
对于这样的计算,您应该更仔细地查看表达式。你想要的是:
-5 + 10-20 + 40-80 + 160
= 5 *( - 1 + 2 - 4 + 8 - 16 + 32)
= 5 *(( - 1)^ 1 *(2 ^ 0)+( - 1)^ 1 *(2 ^ 1)+( - 1)^ 1 *(2 ^ 2)+( - 1) ^ 1 *(2 ^ 3)+( - 1)^ 1 *(2 ^ 4)+( - 1)^ 1 *(2 ^ 5))
在C语言中,a ^ b等同于pow(a,b)
= 5 *总和i(( - 1)^(i + 1)* 2 ^ i)其中i从0变为5
您是否认为在i
循环中迭代变量for
会更容易?我把这个作为练习。
答案 1 :(得分:0)
另一种很酷的方式:
const int START = -5, LIMIT = 160;
int somme = 0;
for(int terme = START; (terme<LIMIT && (-terme)<LIMIT)||(printf("equals //
%d\n\n",somme),0); terme = -(terme*2)){
somme += terme;
}