您的位置:首页 > 其它

UVa10023手动开大数平方算法

2015-08-12 11:58 330 查看
题目链接:UVa 10023



import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void sqrt(BigInteger bi){
String str;
str=bi.toString();
int m=str.length();
if(m%2!=0)
str="0"+str;
BigInteger a,b,c,d,ans;
b=BigInteger.valueOf(0);
c=BigInteger.valueOf(0);
ans=BigInteger.valueOf(0);
try{
for(int i=0;i<m;i+=2){
a=b.multiply(new BigInteger("100")).add(new BigInteger(str.substring(i,i+2)));
for(int j=0;j<10;j++){
d=c.multiply(new BigInteger("20")).add(BigInteger.valueOf(j+1)).multiply(BigInteger.valueOf(j+1));
if(d.compareTo(a)>0){
c=c.multiply(new BigInteger("20")).add(BigInteger.valueOf(j)).multiply(BigInteger.valueOf(j));
b=a.subtract(c);
ans=ans.multiply(new BigInteger("10")).add(BigInteger.valueOf(j));
c=ans;

break;
}
}
}
}catch(Exception e){
e.getStackTrace();
}
System.out.println(ans);
}
public static void main(String args[]){
Scanner cin=new Scanner(System.in);
int n;
n=cin.nextInt();
for(int k=0;k<n;k++){
if(k!=0)
System.out.println();
sqrt(cin.nextBigInteger());
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: