这是一个我无法回答的练习题。谁有关于配方的线索?我正在考虑这些数字的总和.. 2 ^ 0 + 2 ^ 1 + 2 ^ 2 ... 2 ^ n? 什么是(sign = -sign;)用于?感谢能够提供帮助的任何人。
描述以下函数计算的数学公式。
// Pre: n>=0
// Post: ???
double WhatAmI(int n) {
int result=0;
int ctr=0;
int sign = 1;
while(ctr<=n) {
result = result + power(2,ctr);
sign = -sign;
ctr++;
}
return result;
}
答案 0 :(得分:2)
好吧,该函数计算这个公式(我可能会以非常低效的方式添加):
2^(n+1) - 1
当然假设您的意思是pow()
而不是power()
(或者至少他们做同样的事情)。结果是它创建了一个二进制掩码,其中包含n+1
1。
WhatAmI(3) = 15 = 0b1111
WhatAmI(4) = 31 = 0b11111
WhatAmI(7) = 255 = 0b11111111
正如其他人所提到的,似乎没有使用sign
变量。
这是一个更有效的功能,完全相同:
double WhatAmI(int n) {
return (1 << (n+1)) - 1;
}
答案 1 :(得分:1)
这是将{2}的权力加到2^n
。
如果你考虑一下,它只是将数字中的每一位都设置为1。
n | result (binary)
----+------------------------------------
0 | 00000000 00000000 00000000 00000001
1 | 00000000 00000000 00000000 00000011
2 | 00000000 00000000 00000000 00000111
3 | 00000000 00000000 00000000 00001111
... | ...
29 | 00111111 11111111 11111111 11111111
30 | 01111111 11111111 11111111 11111111
31 | 11111111 11111111 11111111 11111111
你当然可以在没有循环的情况下计算出来。
该函数在内部使用int
但返回double
,因此不清楚这是否限制为整数。无论哪种方式,公式都是一行。将把这部分练习留给你。
请注意,如果您只需要处理ints
,则运营商(<<
)可以替代pow
。