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. }

最后还有一种巧妙的方法,利用对数的换底公式来做,高中学过的换底公式为log a b = log c b / log c a,那么如果n是3的倍数,则log 3 n一定是整数,我们利用换底公式可以写为log 3 n = log 10 n / log 10 3,注意这里一定要用10为底数,不能用自然数或者2为底数,否则当n=243时会出错,原因请看 这个帖子 。现在问题就变成了判断log 10 n / log 10 3是否为整数,在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

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值