一种计算正整数平方根的方法

观察十进制的情况
数值(a) 位数(m) 正整数平方根(b) 正整数平方根位数(n)
1            1                         1                1
99          2                         9                1
100        3                        10               2
999        3                        31               2
10000    5                       100              3
...


结论:n = ( m + 1 ) / 2


对于二进制同样有效


算法思路:
(0). 计算出正整数的二进制(补码,为其本身)的最高位(第一个不是0的位);
(1). 取正整数的二进制值长度(奇数按+1计算)的一半:
     最小值(计算起点)为首位为1其它位为0的数;
     最大值为所有位都是1的数(视算法而定,如果用折半查找可以需要引入最大值)
(2). 通过循环,找出最小值和最大值之间符合条件的数( b^2<=a&&(b+1)^2>a  )


改进想法:
结合折半查找减少运算次数;


最大值的计算:
int maxnumber = 1;
for ( int i = 0; i < 位数; i++ )
maxnumber += 1 << i;


时间有限,未深究,欢迎补充和完善,或者提出更好的办法


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值