求X的平方根遇到的问题

黄小猛 2018-11-08 04:54:28
就是LeetCode第69题https://leetcode-cn.com/problems/sqrtx/description/
实现 int sqrt(int x) 函数。

计算并返回 x 的平方根,其中 x 是非负整数。

由于返回类型是整数,结果只保留整数的部分,小数部分将被舍去。


因为不要求小数部分,所以我想的方法比较暴力,就是从1开始遍历,直到n的平方大于要求的数,返回n-1,但是当输入是2147395600,返回的结果是289398,正确答案应该是46340。这是怎么回事?
int mySqrt(int x) {
int n=1;
while(n*n<=x){
n++;
}
return n-1;
}
...全文
406 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zgbzsu2008 2018-12-18
  • 打赏
  • 举报
回复
while(n*n<x) 改成 while(n<x/n) 这样就不会溢出
SD_LTF 2018-12-14
  • 打赏
  • 举报
回复
要么直接sqrt(x),要么开long long
weixin_42359982 2018-12-10
  • 打赏
  • 举报
回复
没错,越界了。
AlbertS 2018-11-26
  • 打赏
  • 举报
回复
越界了吧,改成无符号整数应该就行了
zhouqunhai 2018-11-18
  • 打赏
  • 举报
回复
使用u64的类型应该就可以
牛奶土豆 2018-11-18
  • 打赏
  • 举报
回复
当开始理解程序执行后,需要开始关注如何规范编程了,比如溢出、空指针、数组界限等。参考Google C++ Stylehttps://google.github.io/styleguide/cppguide.html
天杪 2018-11-10
  • 打赏
  • 举报
回复
class Solution {
public:
    int mySqrt(int x) {
        return sqrt(x);
    }
};
直接平方根就可以了。
只此冒泡君 2018-11-10
  • 打赏
  • 举报
回复
果然暴力 但是要考虑一下溢出的问题 还有非负值多用 无符号
自信男孩 2018-11-09
  • 打赏
  • 举报
回复
注意n是int类型,超过2^31就是负数了,因为最高位是符号位。将n设置为u32或者u64的类型
636f6c696e 2018-11-09
  • 打赏
  • 举报
回复
改成uint就好了

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧