试图找到一个数字的日志,但由于某种原因它不起作用
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 < exponent)
不同。这段代码还有很多不正确的地方,但这会导致无限循环。
应该是基数
谢谢兄弟 我如何添加注释并突出显示我的代码?我看了帮助页面还是不明白,我该怎么做呢?我还有一个关于我的代码的快速问题。 SO是什么?
SO 是 Stack Overflow,我们所在的网站。单个反引号将执行inline highlighting
,尽管作为对您的问题的编辑可能比作为评论更有意义。
我一无所知哈哈...好吧,我刚刚编辑了我的代码,它工作得很好,但我对它的效率有疑问。尽管我不是最好的程序员,但我知道全局变量在你的程序中并不是最好的——比如int counter = 1
(或者至少可以避免),我可以在这个特定的程序中轻松避免这样做吗?我一直对这个想法有疑问,希望有建议。再次感谢
【参考方案1】:
这会导致递归,只要base != exponent
。 else
分支永远不会被调用(因为 if
和 else 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 部分因此无效:基数将自行开始相乘,而不是用户提供的初始基数,这是我编写的更新代码,再次感谢您的帮助!
我无法在评论中标记代码哈哈抱歉,让我弄清楚...
如果您对我的想法感兴趣,我刚刚编辑了我的实际代码,再次感谢您的帮助!
看起来不错!这应该被编译成一个循环,所以传递额外的参数也不应该增加开销。以上是关于试图找到一个数字的日志,但由于某种原因它不起作用的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用 flexbox 创建 16x16 网格,但由于某种原因 width: 100% 不起作用