我在制作这个节目时遇到了麻烦。是否可以通过获取指数值而不使用*, ^, Math.pow
来编写程序?示例I的基数为2,指数为3.
Q1。我应该用什么操作来帮助添加以得到正确的结果?
Q2。添加就够了吗?
答案 0 :(得分: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;
}
请注意,该函数返回一个double值,因为如果指数为负数,则结果不能用整数类型表示。
答案 1 :(得分: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
请注意,我没有对此进行过测试,但应该按照这一点进行测试,我可能已经搞砸了。
你还应该注意到x ^ 0 = 1,所以在那里添加一个额外的检查。这仅适用于有符号的整数,因为此算法不适用于否定