2015-03-09 3 views
1

У меня возникли проблемы с созданием этой программы. Можно ли написать программу, получив экспоненциальное значение без использования *, ^, Math.pow? Пример I имеет основание 2 и показатель составляет 3.Выполнение экспоненциальной операции с использованием только добавления в Java

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

Q2. дополнение достаточно?

+0

Если база будет '2', вы можете, например, использовать бит-сдвиг. Просто сдвиньте его налево число раз вашего показателя меньше единицы. – Kon

+1

'^' означает исключительное ИЛИ в Java, это не имеет никакого отношения к возвышению. – Jesper

+0

но я новичок в java sir, я не знаю, как использовать эту бит-сдвиг. есть ли другой способ, как зацикливание? – Denver

ответ

1

Да, можно использовать только дополнение, чтобы сделать возведение в степень. Помните, что умножение является повторением добавления много раз, и что возведение в степень является повторением умножения много раз.

Например, вы могли бы написать следующую функцию, которая будет экспоненциируется номер:

double exp(long base, long exponent) { 

    //when the exponent is zero 
    if (exponent == 0) return 1.0; 

    long result = base; 
    long exponent_abs = Math.abs(exponent); 

    //repeating multiplication many times to achieve exponentiation 
    for (int i = 2 ; i <= exponent_abs ; ++i) { 

     result = multiply(result, base); 
    } 

    //if the exponent is positive, return result you found. 
    if (exponent > 0) return result; 
    //if it is negative, return a fraction. 
    return 1/((double)result); 
    } 

//repeating addition many times to achieve multiplication. 
long multiply(long number1, long number2){ 
    long result = number1; 

    for (int i = 1; i < number2; ++i){ 
     result += number1; 
    } 
    return result; 
} 

Обратите внимание, что функция возвращает двойное значение, так как если ваш показатель является отрицательным, то результат не может быть выражен с интегралом тип.

+0

Вы не можете использовать '! Exponent' в Java. Вам понадобится 'exponent == 0'. – Holloway

+0

Спасибо, исправил. –

+0

@JadieldeArmas вы можете помочь мне немного здесь, как я буду называть это в своем главном, я хочу напечатать его, чтобы я мог видеть, что происходит? и что такое математика? – Denver

0

Почему вы не можете использовать эти функции языка? Во всяком случае:

public int pow (final int base, final int exponent) { 
    int result = base; 
    for (int i = 1; i < exponent; i++) 
    for (int j = 0; j < base; j++) 
     result += base; 
    return result; 
} 

Это работает, очевидно, только для целых чисел (или тоскует на самом деле), если у вас есть плавающее значение в качестве показателя я не думаю, что вы можете избежать^или Math.pow

Обратите внимание, что я не проверял это но должен работать по этой линии, я мог бы что-то испортить.

Следует также отметить thate x^0 = 1, поэтому добавьте дополнительную проверку там. И это работает только с подписанными ints, так как этот алгоритм не сделан для отрицательных значений.

Смежные вопросы