java 开平方的符号_java千位开平方算法

package main;

import java.math.BigInteger;

public class Main6 {

public static void main(String[] args) {

int n=2;

double sqrt=Math.sqrt(n);

String sqrtStr=sqrt+0.0001+"";

int pointIndex=sqrtStr.indexOf(".");

String left=null;

if(pointIndex==-1){

System.out.println("结果为"+sqrtStr);

}else{

left=sqrtStr.substring(0,pointIndex+2);//

}

int leftNum=Integer.parseInt(sqrtStr.substring(0,pointIndex));

int rightNum=Integer.parseInt(sqrtStr.substring(pointIndex+1,pointIndex+2));

String aStr=((n-leftNum*leftNum)*100-(leftNum*20+rightNum)*rightNum)*100+"";

String bStr=left.replace(".","");

BigInteger a=new BigInteger(aStr);

BigInteger b=new BigInteger(bStr);

BigInteger num20=new BigInteger("20");

BigInteger num100=new BigInteger("100");

BigInteger num10=new BigInteger("10");

BigInteger num0=new BigInteger("0");

StringBuilder sb = new StringBuilder(left);//2704

for (int i = 0; i < 700; i++) {

int c = 0;

try {

c = chufa(a,b);

} catch (Exception e) {

e.printStackTrace();

throw new RuntimeException("--bbb--");

}

sb.append(c);

BigInteger bigC=new BigInteger(c+"");

//int d=(b*20+c)*c;

BigInteger d=b.multiply(num20).add(bigC).multiply(bigC);

if(a.subtract(d).compareTo(num0)<0){

throw new RuntimeException("--ERROR--"+i);

}

a=a.subtract(d).multiply(num100);

b=b.multiply(num10).add(bigC);

}

System.out.println(sb.toString());

}

public static void main2(String[] args) {

int a=400;

int b=14;

for (int i = 0; i < 10; i++) {

int c=a/10/2/b;

int d=(b*20+c)*c;

a=(a-d)*100;

b=b*10+c;

}

}

public static void main3(String[] args) {

long a=400;

long b=14;

for (int i = 0; i < 10; i++) {

int c=(int)(a/10/2/b);

long d=(b*20+c)*c;

a=(a-d)*100;

b=b*10+c;

}

}

public static int ji(int shiWei,int geWei){

return (shiWei*20+geWei)*geWei;

}

public static int chufa(BigInteger a,BigInteger b){

if(a.toString().length()<9){

return a.intValue()/20/b.intValue();

}else{

String aa=a.toString();

String bb=b.toString();

String aaa=aa.substring(0,8);

String bbb=bb.substring(0,bb.length()-(aa.length()-8));

try {

if(Integer.parseInt(aaa)/Integer.parseInt(bbb)/20>10){

throw new RuntimeException("--过大--"+Integer.parseInt(aaa)/Integer.parseInt(bbb)/20);

}

return Integer.parseInt(aaa)/20/Integer.parseInt(bbb);

} catch (NumberFormatException e) {

throw new RuntimeException("--aaaa--");

}

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值