无需使用任何电源功能即可返回2的功率

时间:2009-10-23 11:50:03

标签: java

我想要一个以int x为参数并返回2^x的程序。不允许实施使用。

public int double2 (int x) {
    int r = 2;
    int y = 1;
    for (int i=0; i < x; i++){    
        y = r* y;
    }
    return y;
}

您认为这是一个正确的解决方案吗?

5 个答案:

答案 0 :(得分:5)

您使用for循环发布的解决方案会产生正确的结果,但您应该像Adamski首次提到的那样,研究一种更有效的解决方案(bit shifting)。

答案 1 :(得分:1)

这个怎么样:

int power = someNumberHere;
int result = 1;
while (power-- > 0) result *= 2;

我认为这就是你想要的......我想。你想找到两个人的力量吗?也许扩大你想要的问题背后的问题,范围和原因。

答案 2 :(得分:0)

y = x*x;

y = x*2;

y = 42; // ;) 

取决于“2的双倍”是什么意思。

修改

天真的实施

public int 2powerOf( int n ) {
    int r = 2;
    for( int i = 1 ; i < n ; i++ ) {
        r = r * 2;
    }
    return r;
 }

这几乎和你发布的一样,但这可能不会处理负值。

如果你想知道你的作品是否有效,那么就运行它,找出适合自己的方法。

答案 3 :(得分:0)

以防万一你需要这样的解释性代码(虽然它在C中)。

#include <stdio.h>
int main(void)
{
    int base, power, index;
    long answer;
    base = 0;
    power = 0;
    answer = 1.00;

    printf(" Enter a base number: ");
    scanf("%d", &base);
    printf(" Enter a power to raise the base to: ");
    scanf("%d", &power);

    for(index = 1; index <= power; index++)
        answer = answer * base;

    printf("%d raised to the power of %d is %ld.", base, power, answer);
    getchar();
    getchar();
    return 0;
}

答案 4 :(得分:-1)

您的实现是否通过了以下JUnit测试?

import junit.framework.TestCase;

public class YourClassTest extends TestCase {

    private YourClass sut = new YourClass();

    public void testPowersOfTwo() {
        assertEquals(1, sut.double2(0));
        assertEquals(2, sut.double2(1));
        assertEquals(4, sut.double2(2));
        assertEquals(8, sut.double2(3));
        assertEquals(16, sut.double2(4));
    }

}

如果确实如此,这是一个有效的解决方案(但可能不是最佳的)。