试图找到一个数字的日志,但由于某种原因它不起作用

Posted

技术标签:

【中文标题】试图找到一个数字的日志,但由于某种原因它不起作用【英文标题】:Trying to find the log of a number but it is not working for some reason 【发布时间】:2020-11-19 05:15:14 【问题描述】:

我正在尝试编写一个解决日志功能的程序。首先,我只是让它可以计算具有整数答案的日志(例如,log 6 of 36 = 2)。我采用了递归路线,从逻辑上讲,它似乎非常可行,但在尝试实现它时,它不起作用。我没有收到任何语法错误,但正在发生的事情是我收到“未处理的异常”错误,我认为这是因为我采用了递归路线(出于某种原因无限循环?)。希望这是足够的信息来回答,谢谢!

int counter = 1;

void checkifDone(int initial, int base, int exponent); 

int main() 
    checkifDone(6, 6, 7776);
    

void checkifDone(int initial, int base, int exponent) 
    
    base = initial * base; 
    counter++;
    if (base < exponent) 
        checkifDone(initial, base, exponent);
    
    else if (base == exponent) 
        
        cout << "Answer is " << counter << endl;
    
    else 
        cout << "not a whole number answer" << endl;
    

【问题讨论】:

追踪如果exponent 不是base 的力量会发生什么。提示:if(base != exponent)if(base &lt; exponent) 不同。这段代码还有很多不正确的地方,但这会导致无限循环。 应该是基数 谢谢兄弟 我如何添加注释并突出显示我的代码?我看了帮助页面还是不明白,我该怎么做呢?我还有一个关于我的代码的快速问题。 SO是什么? SO 是 Stack Overflow,我们所在的网站。单个反引号将执行inline highlighting,尽管作为对您的问题的编辑可能比作为评论更有意义。 我一无所知哈哈...好吧,我刚刚编辑了我的代码,它工作得很好,但我对它的效率有疑问。尽管我不是最好的程序员,但我知道全局变量在你的程序中并不是最好的——比如int counter = 1(或者至少可以避免),我可以在这个特定的程序中轻松避免这样做吗?我一直对这个想法有疑问,希望有建议。再次感谢 【参考方案1】:

这会导致递归,只要base != exponentelse 分支永远不会被调用(因为 ifelse if 涵盖了所有可能性)。

更简单的方法是使用 while 循环并检查小于:

void checkifDone(int base, int exponent) 
   int count = 0;
   int curr = 1;
   while (base < exponent) 
      curr *= base;
      ++count;
   
   if (curr == exponent) 
      std::cout << "Answer is " << count << std::endl;
    else 
      std::cout << "not a perfect log" << std::endl;
   

【讨论】:

请注意,这会错误地得出8 不是2 的幂的结论。 嘿,谢谢你的回答,我想了很久,终于明白了!!虽然我没有使用你们的解决方案,但它更多地打开了我的思路。顺便说一句,Kostas,(这是我的错) base = base * base 部分因此无效:基数将自行开始相乘,而不是用户提供的初始基数,这是我编写的更新代码,再次感谢您的帮助! 我无法在评论中标记代码哈哈抱歉,让我弄清楚... 如果您对我的想法感兴趣,我刚刚编辑了我的实际代码,再次感谢您的帮助! 看起来不错!这应该被编译成一个循环,所以传递额外的参数也不应该增加开销。

以上是关于试图找到一个数字的日志,但由于某种原因它不起作用的主要内容,如果未能解决你的问题,请参考以下文章

CSS媒体查询由于某种原因不起作用

尝试使用 flexbox 创建 16x16 网格,但由于某种原因 width: 100% 不起作用

列表项“li:hover”不起作用

classList.remove 和 .add 由于某种原因无法正常工作

Google Charts LogScale无效

SqlDataReader 参数不起作用