博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
手算平方根和基于 Java BigInteger 的大整数平方根的实现
阅读量:7153 次
发布时间:2019-06-29

本文共 2141 字,大约阅读时间需要 7 分钟。

为了实现任意大数的运算,long用BigInteger替换带哦。

好了废话少数,先说数学原理,也就是手算平方根计算机代码实现!那么什么叫手算平方根了???

手开方图解

据说前苏联的普通工人都会的(毛熊国果然是一个神奇的国度!听到这里我背脊发冷,再次膜拜俄罗斯基础数!!和那令人望而生畏的吉米多维奇了!!! )

它的计算步骤如下:

1.将被开方数的整数部分从个位起向左每隔两位划为一段,用撇号分开分成几段,表示所求平方根是几位数;

2.根据左边第一段里的数,求得平方根的最高位上的数;
3.从第一段的数减去最高位上数的平方,在它们的差的右边写上第二段数组成第一个余数
4.把求得的最高位数乘以20去试除第一个余数,所得的最大整数作为试商;
5.用商的最高位数的20倍加上这个试商再乘以试商.如果所得的积小于或等于余数,试商就是平方根的第二位数;如果所得的积大于余数,就把试商减小再试;
6.用同样的方法,继续求平方根的其他各位上的数.

实例的说明

1.如求529的算术平方根时先由个位向左两位两位地定位:定位为5,29,接着象一般除法那样列出除式.

2.先从最高位用最大平方数试商:最大平方数不超过5的是2,得商后,除式5-4后得1。把商2写上除式
3.加上下一位的数:得129。
4.用20去乘商后去试商129:2×20=40。因为129/40的整数部分为3.所以可试商为3
5.那就把试商的3加上40去除129。得129÷43=3,把3写上除式上
6.这时129-129=0,无余数啦。
7.这时除式上的商是23,即是529的平方根。手工是这样做的。

1180694-20170610231651137-1479204643.jpg

同理计算10517049的平方根也同理

1180694-20170610231656575-879632912.jpg

Java

import java.math.BigInteger;  public class Test  {      public static String sqrt(String num)      {          BigInteger b=new BigInteger(num);          //不用多解释了吧          if(b.compareTo(BigInteger.ZERO)<0)              return "不是非负数";                String sqrt="0"; //开方结果          String pre="0"; //开方过程中需要计算的被减数          BigInteger trynum; //试商,开放过程中需要计算的减数          BigInteger flag;  //试商,得到满足要求减数的之后一个数          BigInteger _20=new BigInteger("20"); //就是20          BigInteger dividend; ///开方过程中需要计算的被减数          BigInteger A;  //(10*A+B)^2=M          BigInteger B;            BigInteger BB;                    int len=num.length(); //数字的长度                    if(len%2==1)  //长度是奇数的画,首位补上1个0凑成偶数位          {              num="0"+num;              len++;          }            for(int i=0;i
0) { sqrt+=j; //结果加上得到的j pre=dividend.subtract(trynum).toString(); //更新开方过程中需要计算的被减数 break; } } } return sqrt.substring(1); } public static void main(String[] args) { System.out.println(MathTool.sqrt("1234567890123456789")); System.out.println(Math.sqrt(1234567890123456789l)); } }

运行结果

1111111106

1.1111111061111112E9

Author by : Kalafianian本当は空を飞べると知っていたから羽ばたくときが怖くて风を忘れたOblivious 何処へ行くの

转载于:https://www.cnblogs.com/Kalafinaian/p/6980313.html

你可能感兴趣的文章
调用系统拍照
查看>>
解方程
查看>>
Java——IO之常量及路径
查看>>
DKhadoop安装包下载与监控参数说明
查看>>
Linux-3.5-Exynos4412驱动分层分离
查看>>
Linux shell break、continue、exit、return的用法 及exit、return的区别
查看>>
手动实现 SpringMVC
查看>>
thinkphp 验证码的使用
查看>>
NSUserDefaults保存应用中的数据
查看>>
安装gevent错误/gevent/core.so: undefined symbol: event_global_current_base_ 的解决方案
查看>>
XML序列化点滴
查看>>
Android游戏与应用开发最佳学习路线图
查看>>
【转】NSJSONSerialization解析JSON数据
查看>>
POJ 3252 Round Numbers(数学问题)
查看>>
本地使用CVS
查看>>
模拟系统提示框
查看>>
在dos下运行java jar包,并把命令存为bat文件
查看>>
<如何成为一个成功的职业经理人>读书笔记2
查看>>
Java EE企业系统性能问题的原因和解决建议[也适用于.NET]
查看>>
IBM 云计算 笔记
查看>>