X的平方

题目描述:

实现 int sqrt(int x) 函数,计算并返回 x 的平方根。

样例

sqrt(3) = 1

sqrt(4) = 2

sqrt(5) = 2

sqrt(10) = 3

题解:

解法1:

/// 解法1: O(sqrt(n))
class Solution {
public:
    /**
     * @param x: An integer
     * @return: The sqrt of x
     */
    int sqrt(int x) {
        // write your code here
        for (int i=0; i*i<=x; ++i) {
            long long temp = (long long)(i+1)*(i+1);
            if (temp > x) {
                return i;
            }
        }
    }
};

解法2:

二分

///解法2: O(log(n))

class Solution {
public:
    /**
     * @param x: An integer
     * @return: The sqrt of x
     */
    int sqrt(int x) {
        // write your code her
        int l = 1;
        int r = x / 2 + 1; //  ans >= 1 && ans <= x/2 + 1
        while(l <= r) {
            long long mid = (l + r) / 2;
            long long t1 = mid * mid;
            long long t2 = (mid + 1) * (mid + 1);
            if (t1 == x || (t1 < x && t2 > x)) return mid;
            if (t1 < x) {
                l = mid + 1;
            }else r = mid - 1;
        }
    }
};

解法3:

牛顿迭代法

///解法3: 牛顿迭代法
/* f(x) = n - x * x
 * Xi+1 = Xi - f(Xi)/f‘(Xi)
 * Xi+1 = Xi - (n - Xi*Xi)/(-2*Xi)
 * Xi+1 = (Xi + n / Xi) / 2
 */

class Solution {
public:
    /**
     * @param x: An integer
     * @return: The sqrt of x
     */
    int sqrt(int x) {
         write your code her
        if (x == 0) return 0;
        double l = 0;
        double r = 1;
        while(l != r) {
            double t = r;
            l = (r + x*1.0 / r) / 2.0;
            r = l;
            l = t;
        }
        return (int) l;
    }
};

参考链接:

https://zh.wikipedia.org/wiki/%E7%89%9B%E9%A1%BF%E6%B3%95

http://www.cnblogs.com/AnnieKim/archive/2013/04/18/3028607.html

时间: 2024-10-19 22:32:52

X的平方的相关文章

洛谷 P1206 [USACO1.2]回文平方数 Palindromic Squares

题目描述 回文数是指从左向右念和从右向左念都一样的数.如12321就是一个典型的回文数. 给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数.用'A','B'--表示10,11等等 输入输出格式 输入格式: 共一行,一个单独的整数B(B用十进制表示). 输出格式: 每行两个B进制的符合要求的数字,第二个数是第一个数的平方,且第二个数是回文数. 输入输出样例 输入样例#1: 10 输出样例#1: 1 1 2 4 3

输出1-256之间一个数的平方是回文数

方法: 通过一个函数求出这个数一共是几位数 循环取余数依次放入临时数组 通过数组下标循环判断 1 //功能:打印所有不超过 n( n<256)的其平方具有对称性的数(也称回文数) 2 3 4 5 #include<stdio.h> 6 #include<stdlib.h> 7 8 int judg(int); 9 int getBit(int); //返回整数值的位数 10 11 void main(){ 12 for (int i = 0; i < 256; i++)

javascript基础程序(算出一个数的平方值、算出一个数的阶乘、输出!- !- !- !- !- -! -! -! -! -! 、函数三个数中的最大数)

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <script> /* 算出一个数的平方值 function add(a){ var b=Math.sqrt(a); return b; } alert(add(3));*/ /*// 算出一个数的阶乘 func

Project Euler 98:Anagramic squares 重排平方数

Anagramic squares By replacing each of the letters in the word CARE with 1, 2, 9, and 6 respectively, we form a square number: 1296 = 362. What is remarkable is that, by using the same digital substitutions, the anagram, RACE, also forms a square num

C语言(7)--高精度加法、减法、乘法、今天是星期几、四位平方数、候选人选票问题

1.高精度加法.减法.乘法 #include <stdio.h> #include <string.h> #include <malloc.h> void plus(char *a,char *b,char *c);//自定义高精度加法函数 void sub(char *a,char *b,char *c);//自定义高精度减法函数 void multiply(char *a,char *b,char *c);//自定义高精度乘法函数 int main() { char

bzoj 1426:收集邮票 求平方的期望

显然如果收集了k天,ans=k*(k+1)/2=(k^2+k)/2.那么现在要求的就是这个东西的期望. 设f[i]表示已有i张邮票,收集到n张的期望次数,g[i]表示已有i张邮票,收集到n张的次数的平方的期望. 显然i这个点有 $\frac{i}{n}$ 的概率走自环,有 $\frac{n-i}{n}$ 的概率走到i+1这个点. SO $$f[i]=(\frac{i}{n})\times(f[i]+1)+(\frac{n-i}{n})\times(f[i+1]+1)$$ 以前一直不懂平方的期望是

bzoj:4105: [Thu Summer Camp 2015]平方运算

Description Input 第一行有三个整数N,M,p,分别代表序列的长度.平方操作与询问操作的总次数以及在平方操作中所要模的数. 接下来一行N个数代表一开始的序列{X1,X2,...,XN}. 接下来M行,每行三个整数op,l,r.其中op代表本次操作的类型.若op=0,代表这是一次平方操作,平方的区间为[l,r]:如果op=1,代表这是一次询问操作,询问的区间为[l,r]. Output 对于每次的询问操作,输出一行代表这段区间内数的总和.注意:答案没有对任何数取模. Sample

有序数组每个数平方后,不同数字的个数?O(n)

此乃一道笔试题,当时的确也出来啦.(但是在细节上还是出错啦,对多次重复出现的数字可能会重复计数,没有记录上次删除的元素) 如题,有序数组,可以知道平方之后在两边的数据较大,中间的数据较小. 因此可以使用两个下标,从两边向中间扫描.将绝对值大的数字删掉,计数即可,并记录刚才删除的数值的绝对值,以免出现多次相同的数据,重复计数的问题. 具体看完整代码: 1 #include <iostream> 2 #include <vector> 3 #include <algorithm&

中国的房屋为什么不能按一个平方为单位期权/期货购买呢?

这么说吧,假设一个工作很努力的人,他一个月工资正好可以买一平方米的房子, 可是市场上房子是按套,不按平方卖的, 于是这点钱只好存银行,低利率+高通胀+房价涨幅, 很快,2.3年后,将存进去的钱,同等数目只能买半个平方了 能不能解决这种恶心变态的人肉绞肉机呢? 一个办法,就是将房屋市场做成期权,或者期货, 买房在没能力付出首付的时候, 可以只单买一个平方的期权/期货, --当然,如果是期权,必须提供准备金(个人的),以保证反方向可以平仓 如果他存够了比方说60个平方 那么他将可以拿它来换一套实际的

洛谷P1206 [USACO1.2]回文平方数 Palindromic Squares

P1206 [USACO1.2]回文平方数 Palindromic Squares 271通过 501提交 题目提供者该用户不存在 标签USACO 难度普及- 提交  讨论  题解 最新讨论 暂时没有讨论 题目描述 回文数是指从左向右念和从右向左念都一样的数.如12321就是一个典型的回文数. 给定一个进制B(2<=B<=20,由十进制表示),输出所有的大于等于1小于等于300(十进制下)且它的平方用B进制表示时是回文数的数.用’A’,’B’……表示10,11等等 输入输出格式 输入格式: 共