如何使用循环来查找产生参数的基数的指数

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 &lt; 0 则发生溢出。 你说得对,其实分割可能更安全,我现在没时间重写,所以我让别人来做。 您所要做的就是将result &gt; 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;

【讨论】:

以上是关于如何使用循环来查找产生参数的基数的指数的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 for 循环使用指数

Javascript:当幂等于 0 时,用于解决指数问题的 While 循环出现错误

如何使用递归计算幂的幂? [关闭]

如何在linux内核中销毁一个基数树

基数排序

如何获取宏的价值指数