我想要一個以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;
}
您認爲這是一個正確的解決方案嗎?
我想要一個以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;
}
您認爲這是一個正確的解決方案嗎?
如何:
int power = someNumberHere;
int result = 1;
while (power-- > 0) result *= 2;
而且我認爲這是你想要的...我想。你想找到兩個力量?也許可以擴展你想要的東西背後的問題,範圍和原因。
請再次閱讀您的代碼。 – 2009-10-23 11:55:40
分號請;-) – 2009-10-23 12:22:05
是的,它可以這樣做,但如何compltion >>>>如果我把循環,而不是while? – 2009-10-23 12:43:13
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;
}
這幾乎是你貼一個,這可能不是處理雖然負值。
如果你想知道你的工作,然後運行它並找出你的自我。
我的意思是2^2 2^3 2^4 但我將其添加爲權力的力量 – 2009-10-23 12:41:51
您的實現是否通過以下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));
}
}
如果確實如此,這是一個可行的解決方案(但也許不是最優的)。
您使用for循環發佈的解決方案會產生正確的結果,但您應該像Adamski首次提到的那樣查找更高效的解決方案(bit shifting)。
這是最好的答案,不僅因爲位移是絕對正確的事情在這裏使用,但因爲這個答案不'不要爲OP做他的功課。 – 2009-10-26 15:48:52
只是在以下情況下,如果你需要這樣的解釋性代碼(儘管在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;
}
你應該更清楚地解釋這個,你想做什麼? (聽起來像功課) – 2009-10-23 11:52:20
「2的雙倍」?你的意思是4? – 2009-10-23 11:52:44
return 2; // 2的doppleganger – 2009-10-23 11:57:32