我想要一个以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;
}
您认为这是一个正确的解决方案吗?
答案 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));
}
}
如果确实如此,这是一个有效的解决方案(但可能不是最佳的)。