326.是否为3的平方根 IsPowerOfThree

//循环版本
  1. public static bool IsPowerOfThree(int n) {
  2. if (n == 1) {
  3. return true;
  4. }
  5. double num = n;
  6. bool isPower = false;
  7. while (num >= 1) {
  8. num = num / 3;
  9. if (num == 1 && num == (int)num) {
  10. return true;
  11. }
  12. }
  13. return isPower;
  14. }
//递归版本
  1. public static bool IsPowerOfThree(int n) {
  2. if (n == 1) {
  3. return true;
  4. } else if (n == 0 || n % 3 > 0) {
  5. return false;
  6. } else {
  7. return IsPowerOfThree(n / 3);
  8. }
  9. }
最后还有一种巧妙的方法,利用对数的换底公式来做,高中学过的换底公式为logab = logcb / logca,那么如果n是3的倍数,则log3n一定是整数,我们利用换底公式可以写为log3n = log10n / log103,注意这里一定要用10为底数,不能用自然数或者2为底数,否则当n=243时会出错,原因请看这个帖子。现在问题就变成了判断log10n / log103是否为整数,在c++中判断数字a是否为整数,我们可以用 a - int(a) == 0 来判断,参见代码如下:
  1. class Solution {
  2. public:
  3. bool isPowerOfThree(int n) {
  4. return (n > 0 && int(log10(n) / log10(3)) - log10(n) / log10(3) == 0);
  5. }
  6. };

原文链接: https://www.cnblogs.com/xiejunzhao/p/95a7f960fc8efb0435d314cf4566f823.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

    326.是否为3的平方根 IsPowerOfThree

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/247436

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月14日 上午2:14
下一篇 2023年2月14日 上午2:15

相关推荐