0

这是一个练习题,我很难回答。有人知道公式吗?我在想这些数字的总和...... 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;
}
4

2 回答 2

2

好吧,该函数计算这个公式(我可能会以一种非常低效的方式添加):

2^(n+1) - 1

当然,假设您的意思是pow()代替power()(或至少他们做同样的事情)。效果是它创建了一个带有n+11 的二进制掩码。

WhatAmI(3) = 15 =   0b1111
WhatAmI(4) = 31 =   0b11111
WhatAmI(7) = 255 =  0b11111111

正如其他人所提到的,该sign变量似乎没有被使用。

这是一个更有效的函数,它做同样的事情:

double WhatAmI(int n) {
    return (1 << (n+1)) - 1;
}
于 2012-10-03T20:39:49.767 回答
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内部使用 a 但返回 a double,因此不清楚这是否被限制为整数。无论哪种方式,公式都是一行。将把练习的那部分留给你。

注意,如果你只需要处理ints操作符,( <<) 是一个很好的替代品pow

于 2012-10-03T20:37:46.820 回答