刚刚遇到这个题目的第一想法就是想试试递归,其实题目并不是一个难题,但是觉得很有意思,记录下来分享一下。
题意:
给定一个整数,写一个函数来判断它是否是 3 的幂次方。如果是,返回 true ;否则,返回 false 。
整数 n 是 3 的幂次方需满足:存在整数 x 使得 n == 3^x
先想写的就是递归做法,但是又不能改变函数的传递形式,就会造成以下的结果:
bool isPowerOfThree(int n) {
if(n < 3)
return false;
while(n % 3 == 0)
n /= 3;
return n == 1;
}
45 / 3 = 15 / 3 = 5 / 3 = 1 余 2,此时如果按照整数除法,得到的结果是1,但是5这个数里并没有只包含因数 3。
如果需要进行改进,只需要把 int n 改为 double n
更为合适的办法就是循环求因数法
bool isPowerOfThree(int n) {
if(n <= 0)
return false;
while(n % 3 == 0)
n /= 3;
return n == 1;
}
也可以进行打表等操作(神奇)