判断一个整数是否为平方数的两种方法

文章介绍了两种方法判断一个整数是否为平方数。第一种通过连续奇数序列的和来表示,如0+1,0+1+3,0+1+3+5等;第二种利用二分法在[1,num/2]区间内寻找乘积等于给定整数的正整数。两种方法均以代码形式展示,最后返回结果,若找到则返回平方根,否则返回-1。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.一个整数是平方数,当且仅当它可以被一个连续的奇数序列的和表示,例如0、1、4、9可以表示为0+1、0+1+3、0+1+3+5,从另一个角度,也可以去看两个相邻平方数之差,x的平方-(x-1)的平方=2*x-1,所以可以让一个整数不断去减两个相邻平方数之差,当最后的差值为0,则说明原始整数为平方数,否则相反,代码如下所示。

int findRoot(int n) {
  int i = 0;
  while(n > 0) {
    i++;
    n = n - (2 * i - 1);
  }
  if(n == 0) {
    return i;
  }
  return -1;
}

2.使用二分法判断一个整数是否为平方数,在[1, num/2]中使用二分法寻找是否有正整数的乘积为当前整数

int findRoot(int n) {
  if(n = 0) return 0;
  if(n = 1) return 1;
  if(n = 4) return 2;
  int left = 1;
  int right = n / 2;
  unsigned mid = 0;
  unsigned ji = 0;
  while(left <= right) {
    mid = left + (right - left) / 2;
    ji = mid * mid;
    if(ji == n) {
      return mid;
    }
    else if(ji > n) {
      right = mid - 1;
    }
    else {
      left = mid + 1;
    }
  }
  return -1;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值