如何使用循环来查找产生参数的基数的指数
Posted
技术标签:
【中文标题】如何使用循环来查找产生参数的基数的指数【英文标题】:How to use loops to find the exponent of a base that produces an argument 【发布时间】:2018-02-22 17:20:39 【问题描述】:我正在尝试使用循环来查找产生特定参数的给定基数的指数。例如,在等式 5^x=625 中,5 是基数,625 是参数。我知道在那个等式中 x=4 但我不确定如何在我的回报中得到 4。
这是我目前所拥有的:
public static int log(int base, int argument)
int result = 1;
for (int i=0; i<=; i++)
result = ;
return result;
我不确定要为我的条件陈述和结果添加什么内容。我在这里想念什么?
编辑:我忘了提到我正在尝试在不使用数学库的情况下执行此操作。我还认为包含我的代码以查找权力可能会有所帮助:
public static int pow(int base, int exponent)
int result = 1;
for(int i=0; i<exponent; i++)
result = result*base;
return result;
我本质上只是试图将其反转以找到指数。
【问题讨论】:
您将如何手动执行此操作?考虑如何手动计算2^10
,然后编写一个带有循环的函数exp()
来执行此计算,这可能会有所帮助。这应该会让您对如何实现 log()
函数有所了解。
【参考方案1】:
类似的东西:
public static int log(int base, int argument)
if(argument <= 0 || base <= 0)
throw new IllegalArgumentException("This method only works with positive integers");
int result = 1;
int i = 0;
while(result < argument)
result = result * base;
i++;
if(result == argument)
return i;
else
throw new IllegalArgumentException("There is no integer for x in base^x = argument");
这是处理所有情况时的一些缺陷,但这是一个开始。
【讨论】:
小心整数溢出。 --- 易于测试。如果result < 0
则发生溢出。
你说得对,其实分割可能更安全,我现在没时间重写,所以我让别人来做。
您所要做的就是将result > 0
添加到while
循环条件中。然后它将失败并抛出异常,因为它应该。【参考方案2】:
这更像是一道数学题。
对于公式 5^x = 625,您可以使用 x = log₅(625) = log(625)/log(5) 找到 x。
所以:
public static int log(int base, int argument)
return (int) (Math.log(argument) / Math.log(base));
但也许您已经知道这一点,因为您对方法的命名是正确的。
【讨论】:
你最好舍入而不是强制转换为 int,因为强制转换会将 2.99999999 之类的情况截断为 2,而不是正确的结果 3。【参考方案3】:当结果为 1 或更大时,计算您可以将参数除以基数的次数:
public static int log(int base, int argument)
int result;
for (result=0; argument>=1 ; result++)
argument = argument/base;
return result;
【讨论】:
以上是关于如何使用循环来查找产生参数的基数的指数的主要内容,如果未能解决你的问题,请参考以下文章