2009-10-23 42 views
-1

我想要一個以int x作爲參數並返回2^x的程序。實施不允許使用權力。在不使用任何電源功能的情況下返回2的電源程序

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

您認爲這是一個正確的解決方案嗎?

+6

你應該更清楚地解釋這個,你想做什麼? (聽起來像功課) – 2009-10-23 11:52:20

+2

「2的雙倍」?你的意思是4? – 2009-10-23 11:52:44

+4

return 2; // 2的doppleganger – 2009-10-23 11:57:32

回答

1

如何:

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

而且我認爲這是你想要的...我想。你想找到兩個力量?也許可以擴展你想要的東西背後的問題,範圍和原因。

+0

請再次閱讀您的代碼。 – 2009-10-23 11:55:40

+1

分號請;-) – 2009-10-23 12:22:05

+0

是的,它可以這樣做,但如何compltion >>>>如果我把循環,而不是while? – 2009-10-23 12:43:13

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; 
} 

這幾乎是你貼一個,這可能不是處理雖然負值。

如果你想知道你的工作,然後運行它並找出你的自我。

+0

我的意思是2^2 2^3 2^4 但我將其添加爲權力的力量 – 2009-10-23 12:41:51

-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)); 
    } 

} 

如果確實如此,這是一個可行的解決方案(但也許不是最優的)。

5

您使用for循環發佈的解決方案會產生正確的結果,但您應該像Adamski首次提到的那樣查找更高效的解決方案(bit shifting)。

+0

這是最好的答案,不僅因爲位移是絕對正確的事情在這裏使用,但因爲這個答案不'不要爲OP做他的功課。 – 2009-10-26 15:48:52

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; 
} 
相關問題