java 大整数平方根_手算平方根和基于 Java BigInteger 的大整数平方根的实现
为了实现任意大数的运算,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的平方根。手工是这样做的。
同理计算10517049的平方根也同理
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
{
dividend=new BigInteger(pre+num.substring(2*i,2*i+2));
A=new BigInteger(sqrt);
for(int j=0;j<=9;++j)
{
B=new BigInteger(j+"");
BB=new BigInteger((j+1)+"");
trynum=_20.multiply(A).multiply(B).add(B.pow(2));
flag=_20.multiply(A).multiply(BB).add(BB.pow(2));;
//满足要求的j使得试商与计算中的被减数之差为最小正数
if(trynum.subtract(dividend).compareTo(BigInteger.ZERO)<=0
&&flag.subtract(dividend).compareTo(BigInteger.ZERO)>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 何処へ行くの
java 大整数平方根_手算平方根和基于 Java BigInteger 的大整数平方根的实现相关推荐
- java 数据校验框架_自己写的基于java Annotation(注解)的数据校验框架
JavaEE6中提供了基于java Annotation(注解)的Bean校验框架,Hibernate也有类似的基于Annotation的数据校验功能,我在工作中,产品也经常需要使 用数据校验,为了方 ...
- java基本语法借阅_课内资源 - 基于Java和MySql实现的光盘借阅管理系统
一.需求设计以下几个类:光盘类:用户类:借阅记录类,包括下列模块: 新建.修改.删除光盘信息 新建.修改.删除用户信息 光盘借阅/归还信息记录 查询光盘名称,用户的借阅历史 要求:基于JFrame窗体 ...
- python整数池_【Python】Python中神奇的小整数对象池和大整数对象池
小整数对象池 整数在程序中的使用非常广泛,Python为了优化速度,使用了小整数对象池, 避免为整数频繁申请和销毁内存空间. Python 对小整数的定义是 [-5, 256] 这些整数对象是提前建立 ...
- java青蛙过河打字_趣味算法——青蛙过河(JAVA)
青蛙过河是一个非常有趣的智力游戏,其大意如下: 一条河之间有若干个石块间隔,有两队青蛙在过河,每队有3只青蛙,这些青蛙只能向前移动,不能向后移动,且一次只能有一只青蛙向前移动.在移动过程中,青蛙可以向 ...
- java护照号码校验_学无止境之小白学java……第001天
学习主题:预科阶段 对应视频: http://www.itbaizhan.cn/course/id/18.html 对应作业: 1. 为什么需要学编程,什么样的人可以做程序员? 编程是现实逻辑的表达, ...
- java 优秀源码_想要快速进阶Java架构师?这份超强(长)学习计划单 请签收!...
优秀工程师的成长之路就是一条不断打怪升级之路的"修仙之路"! 而Java程序员一向比别人更难,如果说大家都在修仙的话,java程序员简直神似"剑修",入行枯燥精 ...
- java 并发编程多线程_多线程(一)java并发编程基础知识
线程的应用 如何应用多线程 在 Java 中,有多种方式来实现多线程.继承 Thread 类.实现 Runnable 接口.使用 ExecutorService.Callable.Future 实现带 ...
- java引用公共类_使用键引用从Java公共类获取值 - java
我们有一个Java公共类, public class Test { public class ob1 { public static final String test = "T1T1&qu ...
- java 启动内存参数_请问该如何设置Java虚拟机JVM启动内存参数?
jps(JVM Process Status Tool):JVM机进程状况工具 用来查看基于HotSpot JVM里面所有进程的具体状态, 包括进程ID,进程启动的路径等等.与unix上的ps类似,用 ...
- java新手练习项目_有哪些好的java项目适合新手练习?
要想学好java技术,找到高薪工作,不仅要掌握扎实的理论知识,也要有一定的实操能力. 遇到问题多查多问,可以上网站进行搜索,可以加一些交流群,还可以多问学校的老师--另外要学会欣赏他人的代码,向成功者 ...
最新文章
- android对话框的使用(下)
- 任务管理平台_软件品质评测系统任务分发管理平台
- CentOS四种方法自建yum仓库
- IDC敲黑板啦:未来企业IT以混合云为主
- 使用C#开发ActiveX控件
- 学习VIM之2014
- Atitit 提升扩展性 自由化理念 参数 第一章 前瞻性设计 第二章 自由化理念 自由化参数 json map等半结构化参数,dsl等全功能参数 自由化功能接口 dsl 自由化返回
- c语言如何实现单进程,如何用C语言实现多线程
- 碧海威 L7多款产品 后台命令执行漏洞
- 申请公网IP实战 #华北天津联通
- win10安装visio2010出错_win10安装office2010时显示错误1907如何解决
- Referrer 还是 Referer?
- 苹果搜索广告ASA开户教程
- 无法使用内置管理员账户打开Microsoft Edge
- java做类似于qq空间动态加载_Android仿QQ空间动态界面分享功能
- Unity中鼠标的锁定与解锁
- 壁纸 - 精选海量高清图片与桌面背景
- 简述python文件操作的流程_Python文件操作详解
- TeamTalk部署详细过程(跳过各种坑)
- JAVA——制作java程序说明书、解决DOS下中文编码问题 GBK
热门文章
- 基于SSM框架的流浪动物猫狗救助领养网站设计
- Docker:小白之路 一plus (拉取镜像加速篇)
- 菜鸟怎么用.Net Core 实现QQ登录
- pycaret实现CTG分类案例
- python生成大量随机信息,并保存到Excel文件中
- Android应用开发-小巫CSDN博客客户端UI篇,成功从小公司跳槽
- 小白易学--ps钢笔工具抠图教程-大长腿抠图
- 45.Django06
- lol2月20服务器维护,英雄联盟2月20日维护到几点 今天LOL几点可以进游戏
- matlab程序4名商人,商人们怎样安全过河附MATLAB程序完整.doc