题:不适用迭代或者递归,判断一个int类型的非负整数是否为3的乘方
解题思路:
- 查表法,因为int类型的非负整数是有限的,将所有整数放入一个set中。然后直接判断输入是否在set中即可
- 整除法,因为3是素数,首先int类型内3的最大乘方数,如果一个int类型数是3的乘方,那么该数必然能够整除最大乘方
对应代码如下:
int max_power_3() { int64_t ret = 1; int64_t high = INT_MAX; while (ret <= high) ret *= 3; return int(ret/3); } bool isPowerOfThree(int n) { return (n != 0) && (max_power_3() % n == 0); }
set<int> powers; void init_map() { int64_t i = 1; while (i<=(int64_t)INT_MAX) { powers.insert(i); i *= 3; } } bool isPowerOfThree1(int n) { return powers.count(n) > 0; }