51NOD_1166 大数开平方

来源:互联网 发布:少儿英语网络课程价格 编辑:程序博客网 时间:2024/05/05 20:48

1166_ 大数开平方

基准时间限制:4 秒 空间限制:131072 KB
分值: 320 难度:7级算法题

给出一个大整数N,求不大于N的平方根的最大整数。例如:N = 8,2 * 2 < 8,3 * 3 > 8,所以输出2。
Input
给出一个大数N(N的长度 <= 100000)。
Output
输出不大于Sqrt(n)的最大整数。
Input示例
9
Output示例
3

思路:JAVA大数套牛顿迭代

AC代码:

import java.math.BigInteger;import java.math.*;import java.math.BigInteger;import java.util.Scanner;import java.util.*; public class Main{    public static void bigSqrt(){         Scanner cin=new Scanner(System.in);          String s=cin.next();          BigInteger remain=BigInteger.ZERO;          BigInteger odd=BigInteger.ZERO;          BigInteger ans=BigInteger.ZERO;//          remain=BigInteger.ZERO;//          odd=BigInteger.ZERO;//          ans=BigInteger.ZERO;          int group=0,k=0;          if(s.length()%2==1)          {                  group=s.charAt(0)-'0';                  k=-1;          }          else          {                  group=(s.charAt(0)-'0')*10+s.charAt(1)-'0';                  k=0;          }          for(int j=0;j<(s.length()+1)/2;j++)          {                  if(j!=0)                  group=(s.charAt(j*2+k)-'0')*10+s.charAt(j*2+k+1)-'0';                  odd=BigInteger.valueOf(20).multiply(ans).add(BigInteger.ONE);                  remain=BigInteger.valueOf(100).multiply(remain).add(BigInteger.valueOf(group));                  int count=0;                  while(remain.compareTo(odd)>=0)                  {                         count++;                         remain=remain.subtract(odd);                         odd=odd.add(BigInteger.valueOf(2));                  }                  ans=ans.multiply(BigInteger.TEN).add(BigInteger.valueOf(count));          }          System.out.println(ans);        cin.close();        return;    }       public static void main(String[] args)        {               Scanner cin=new Scanner(System.in);               //int t=cin.nextInt();                   bigSqrt();              cin.close();      }}
0 0
原创粉丝点击