Да, можно использовать только дополнение, чтобы сделать возведение в степень. Помните, что умножение является повторением добавления много раз, и что возведение в степень является повторением умножения много раз.
Например, вы могли бы написать следующую функцию, которая будет экспоненциируется номер:
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;
}
Обратите внимание, что функция возвращает двойное значение, так как если ваш показатель является отрицательным, то результат не может быть выражен с интегралом тип.
Если база будет '2', вы можете, например, использовать бит-сдвиг. Просто сдвиньте его налево число раз вашего показателя меньше единицы. – Kon
'^' означает исключительное ИЛИ в Java, это не имеет никакого отношения к возвышению. – Jesper
но я новичок в java sir, я не знаю, как использовать эту бит-сдвиг. есть ли другой способ, как зацикливание? – Denver