Программа для возврата мощности 2 без использования какой-либо функции мощности - PullRequest
0 голосов
/ 23 октября 2009

Мне нужна программа, которая принимает 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 ]

5 голосов
/ 26 октября 2009

Решение, которое вы разместили с помощью цикла for, дает правильный результат, но вы должны искать более эффективное решение ( битовое смещение ), как впервые упомянул Адамски.

1 голос
/ 23 октября 2009

Как насчет этого:

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

И я думаю, это то, что вы хотите ... Я думаю. Вы пытаетесь найти степень двойки? Может быть, немного расширить вопрос, сферу и причины того, что вы хотите.

0 голосов
/ 26 октября 2009

На всякий случай, если вам нужен такой пояснительный код (хотя это на 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;
}
0 голосов
/ 26 октября 2009

Проходит ли ваша реализация следующий тест 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));
    }

}

Если это так, то это рабочее решение (но, возможно, не оптимальное).

0 голосов
/ 23 октября 2009
y = x*x;

или

y = x*2;

или

y = 42; // ;) 

В зависимости от того, что вы подразумеваете под "двойным числом 2".

EDIT

Наивная реализация

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

Это почти как тот, который вы опубликовали, однако он может не обрабатывать отрицательные значения.

Если вы хотите знать, работает ли ваш, то запустите его и узнайте сами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...