| input | output |
|---|---|
28 |
7 |
题意
给你1-n个数的和,求出n多大。
做法:
根据等差数列公式, 得 (1+n)*n/2 =(n^2+n)/2;
设给的和 为ans。
n^2+n-2ans=0
然后根据 公式 (-b+根号(b^2-4ab))/2a 就可以算出n是多少了。
因为ans很大,所以要用大数。java大数也没有现成的开根号函数,所以要用二分来求 根。
import java.math.*;
import java.util.*;
import java.io.*;
public class Main{
static BigInteger li=BigInteger.ZERO;
static BigInteger yi=BigInteger.ONE;
static BigInteger er=BigInteger.valueOf(2);
public static BigInteger sqrtt(BigInteger n)
{
BigInteger l=yi,r=n,mid;
while(l.compareTo(r)<=0)
{
mid=l.add(r).divide(er);
if(mid.multiply(mid).compareTo(n)<0)
l=mid.add(yi);
else
r=mid.subtract(yi);
//System.out.println(l+" "+r);
}
return l;
}
public static void main(String[] args)
{
Scanner input = new Scanner(System.in);
BigInteger a;
while(input.hasNext())
{
a=input.nextBigInteger();
a=a.multiply(BigInteger.valueOf(8));
a=a.add(BigInteger.ONE);
a=sqrtt(a);
System.out.println(a.subtract(BigInteger.ONE).divide(BigInteger.valueOf(2)));
}
}
}
原文:http://blog.csdn.net/u013532224/article/details/44571661