326.是否为3的平方根 IsPowerOfThree

//自己版本

  1. public static bool IsPowerOfThree(int n) {
  2. if (n == 1) {
  3. return true;
  4. }
  5. double num = n;
  6. bool isPower = false;
  7. while (num >= 1) {
  8. num = num / 3;
  9. if (num == 1 && num == (int)num) {
  10. return true;
  11. }
  12. }
  13. return isPower;
  14. }

//递归版本

  1. public static bool IsPowerOfThree(int n) {
  2. if (n == 1) {
  3. return true;
  4. } else if (n == 0 || n % 3 > 0) {
  5. return false;
  6. } else {
  7. return IsPowerOfThree(n / 3);
  8. }
  9. }

最后还有一种巧妙的方法,利用对数的换底公式来做,高中学过的换底公式为logab = logcb / logca,那么如果n是3的倍数,则log3n一定是整数,我们利用换底公式可以写为log3n = log10n / log103,注意这里一定要用10为底数,不能用自然数或者2为底数,否则当n=243时会出错,原因请看这个帖子。现在问题就变成了判断log10n / log103是否为整数,在c++中判断数字a是否为整数,我们可以用 a - int(a) == 0 来判断,参见代码如下:

  1. class Solution {
  2. public:
  3. bool isPowerOfThree(int n) {
  4. return (n > 0 && int(log10(n) / log10(3)) - log10(n) / log10(3) == 0);
  5. }
  6. };

来自为知笔记(Wiz)

时间: 2024-11-19 21:23:22

326.是否为3的平方根 IsPowerOfThree的相关文章

326. Power of Three

/* * 326. Power of Three * 2016-7-8 by Mingyang * 中规中矩,不过注意,n不能为0,不然while一直走,也不能为负 * 时间logn,空间到是没有要求 */ public boolean isPowerOfThree(int n) { if (n < 1) { return false; } while (n % 3 == 0) { n /= 3; } return n == 1; }

牛顿迭代法求解平方根

牛顿迭代法求解平方根 2015-05-16 10:30 2492人阅读 评论(1) 收藏 举报 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[+] 一个实例 迭代简介 牛顿迭代法 牛顿迭代法简介 简单推导 泰勒公式推导 延伸与应用 一个实例 //java实现的sqrt类和方法 public class sqrt { public static double sqrt(double n) { if (n<0) return Double.NaN; double err = 1e

计蒜课_二分法求平方根

教训:代码一直通不过的也许因为数据类型(在本题中int改为long),而不是逻辑问题: 代码如下: 1 #include<iostream> 2 using std::endl; 3 using std::cout; 4 using std::cin; 5 inline bool isRes(long x,long y){//判断 x是否为y的平方根: 6 return (x*x==y)||((x*x<y)&&((x+1)*(x+1)>y)); 7 } 8 int

经典算法:牛顿迭代法求平方根

//牛顿迭代法求平方根 1 double mysqrt(double num) 2 { 3 double x = num/2; 4 double y = 0; 5 do{ 6 x = x/2+num/(2*x); 7 y = x*x-num; 8 if(y<0) y = -y; 9 } while(y>0.0001); 10 return x; 11 } 12 int main(int argc, char* argv[]) 13 { 14 printf("%.3f",my

牛顿迭代法是如何求平方根的

看<SICP>,提到牛顿迭代(Newton's method)求平发根,有一些想法,记下来 比如给出的数字是 y假设其平方根为 gy 猜想一个数字 x 如果 x==gy,那 y/x==gy 下面重点来了,如果 x!=gy 可能 x<gy,y/x>gy 或者 x>gy,y/x<gy 一大一小,故 (x+y/x)/2 比 x 更接近 gy不断迭代…… --date: 2014-12-22

求平方根的倒数速算法--向卡马克等人致敬

昨日,风雨交加,气温骤降,所有人都蜷缩在不暖和的厚衣服里,无神的盯着显示器.我也不例外,颤抖的手点击着鼠标,一边埋怨这天气,一边埋怨这电脑.突然,一段代码映入眼帘,定睛一看,没看懂,代码是这样的: float Q_rsqrt( float number ) { long i; float x2, y; const float threehalfs = 1.5F; x2 = number * 0.5F; y = number; i = * ( long * ) &y; // 这TM是啥 i = 0

39. leetcode 326. Power of Three

326. 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? 思路:看这个数取以3为底的对数结果是否为整数,C++中只有自然对数函数log()和以10为底的对数函数log10(),所以要借助换底公式.此处用自然对数会有精度问题,用以10为底的对数

Project Euler 80:Square root digital expansion 平方根数字展开

Square root digital expansion It is well known that if the square root of a natural number is not an integer, then it is irrational. The decimal expansion of such square roots is infinite without any repeating pattern at all. The square root of two i

手算平方根

有些丧心病狂的数学题目要求平方根..大概值没给出做精确到某一位..于是我机智地用牛顿迭代233...(话说我pi背到一百多位真是蛋疼..) 例:求$\sqrt{18}$: Initial guess: 4 //4*4=16x = 4x = (4 + 18 / 4)/2 = 4.25x = (x + 18 / x)/2 ~ 4.242647x - (x + 18 / x)/2 ~ 4.242641 //差不多了233 -----------一个相当接近sqrt(17)的分数-----------8