bigpotato

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

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的次方数,要求不用循环和递归。

分析:

  判断一个整数是否是3的次方数,可不断除以3,并判断每一次的余数是否是0,若每一步相除余数都是0,且最后结果为1,则这个数是3的次方数。但这里用到了循环,不合题意。需另想办法。

  我们知道,若整数n是3的次方数,则它可表示为n=3k,指数k=log3n=log10n/log103是一个整数。因此,原题变为判断log10n/log103是否是整数。

代码如下:

bool isPowerOfThree(int n)
{
	if (n <= 0)
		return false;
	double k = log10(n) / log10(3);
	return (k - (int)k < 0.000000000001);
}

  

posted on 2018-03-20 10:10  bigpotato  阅读(117)  评论(0)    收藏  举报