[leetcode]: 326. Power of Three

1.题目

Given an integer, write a function to determine if it is a power of three.

Follow up:
Could you do it without using any loop / recursion?

给一个整数,判断是否为3的幂。不用迭代和递归,如何实现。

2.分析

一开始我走错了方向,以为3的n次方有什么规律。实际上,确实有,但通过这一规律并不是充分条件,只是必要条件。
3的n次方满足:尾数为3,9,7,1。
后来还是看了solution,大致分为两种解法:
1)求解log3(n),结果是整数则n为3的幂
2)找出32位int表示范围内的最大的3的幂1162261467。所有int范围内的3的幂都能整除1162261467。

3.代码

求log3(n)=log(n)/log(3)

bool isPowerOfThree(int n) {
    return fmod(log10(n) / log10(3), 1) == 0;
}

所有int范围内的3的幂都能整除1162261467

bool isPowerOfThree(int n) {
    int max_pow = 1162261467;
    if (n <= 0 || n > max_pow)
        return false;
    return max_pow%n == 0;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值