https://leetcode.com/problems/power-of-three/
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?
方法1 常规循环
bool isPowerOfThree(int n)
{
if(n==0)
return false;
while (n % 3 == 0)
n /= 3;
return n == 1;
}
方法2
因为10的幂在10进制中都是10***,比如1,10,100...
2的幂在2进制中也是10****,比如1,10,100...
所以3的幂在3进制中也该是10****
bool isPowerOfThree(int n)
{
char c[20];//int.max=2147483647->12112122212110202101
itoa(n, c, 3);
string s = c;
if (c[0] != '1')
return false;
for (int i = 1; i < s.length();i++)
{
if (s[i] != '0')
return false;
}
return true;
}
不能用atoi
bool isPowerOfThree(int n)
{
int c[20];//int.max=2147483647->12112122212110202101
int i = 0;
while (n > 0)
{
c[i++] = n % 3;
n /= 3;
}
if (c[--i] != 1)
return false;
while(i>0)
{
if (c[--i] != 0)
return false;
}
return true;
}
bool isPowerOfThree(int n)
{
int c[20];//int.max=2147483647->12112122212110202101
int i = 0;
while (n > 0)
{
c[i] = n % 3;
if (c[i++] != 0)
break;
n /= 3;
}
return n==1;
}
方法3
bool isPowerOfThree(int n)
{
return n == 1 || n == 3 || n == 9 || n == 27 || n == 81 || n == 243 || n == 729 || n == 2187 || n == 6561 || n == 19683 || n == 59049 || n == 177147 || n == 531441 || n == 1594323 || n == 4782969 || n == 14348907 || n == 43046721 || n == 129140163 || n == 387420489 || n == 1162261467;
}
bool isPowerOfThree(int n)
{
return n > 0 && 1162261467 % n == 0;
}
方法4
bool isPowerOfThree(int n)
{
return fmod(log10(n) / log10(3),1) == 0;
}
参考 https://leetcode.com/articles/power-of-three/