码迷,mamicode.com
首页 > 其他好文 > 详细

leetcode-69-Sqrt(x)

时间:2018-04-05 11:50:09      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:inter   输出   overflow   整数   cli   mys   方法   int   post   

题目描述:

Implement int sqrt(int x).

Compute and return the square root of x.

x is guaranteed to be a non-negative integer.

Example 1:

Input: 4
Output: 2

Example 2:

Input: 8
Output: 2
Explanation: The square root of 8 is 2.82842..., and since we want to return an integer, the decimal part will be truncated

 

要实现的函数:

int mySqrt(int x)

 

代码:

#include<climits>
int
mySqrt(int x) { if(x>=2147395600&&x<=INT_MAX)//** return 46340;//** for(int i=0;i<=x;i++) { if((i*i<=x)&&((i+1)*(i+1)>x)) return i; } }

 

说明:

1、本题目采用上述代码很容易实现,但是有一个问题就是时间花费巨大,采用二分查找会好很多……

2、本题目若是要求输出sqrt(x)的完整结果,而不仅仅是整数部分,那么应该采取牛顿迭代法或者泰勒公式展开的方法。最开始就考虑了泰勒展开的方法,后来重新看了下题目,发现打扰了走错路了……

3、c++对于立即数的存储和处理采用的是int类型。

cout<<46341*46341<<endl;的时候,会提示“interger overflow”,因为INT_MAX比46341*46341小。

同理,如果if(46341*46341>INT_MAX)cout<<“good“<<endl;代码运行不会输出good的,因为这时候已经溢出了,结果不会大于INT_MAX的。

之所以要提这一点,是因为最开始的代码中,没有//**标记的那两行。

各位同学想想若是直接去掉了这两行,当x=INT_MAX的时候,mySqrt(x)执行结果会是什么?

leetcode-69-Sqrt(x)

标签:inter   输出   overflow   整数   cli   mys   方法   int   post   

原文地址:https://www.cnblogs.com/king-3/p/8720111.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!