题意:判断n和sum(n-1)是否是完全平方数. sum(n-1)=1+2+3+..+n-1;
java大数开平方
import java.math.BigInteger;
import java.math.*;
import java.math.BigInteger;
import java.util.Scanner;
import java.util.*;
public class Main
{
public static BigInteger bigSqrt(String s){
Scanner cin=new Scanner(System.in);
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));
}
return ans;
}
public static void main(String[] args)
{
Scanner cin=new Scanner(System.in);
int t=cin.nextInt();
String s;BigInteger n;
while(t>0) {
n=cin.nextBigInteger();
s=n.toString();
BigInteger num=bigSqrt(s);
BigInteger x2=num.pow(2);
int flag1=0,flag2=0;
if(n.compareTo(x2)==0)
flag1=1;
BigInteger n1=n.subtract(BigInteger.ONE);
BigInteger sum=n.multiply(n1);
sum=sum.divide(BigInteger.valueOf(2));
s=sum.toString();
num=bigSqrt(s);
x2=num.pow(2);
if(sum.compareTo(x2)==0)
flag2=1;
if(flag1==1&&flag2==1)
System.out.println("Arena of Valor");
else if(flag1==1&&flag2==0)
System.out.println("Hearth Stone");
else if(flag1==0&&flag2==1)
System.out.println("Clash Royale");
else
System.out.println("League of Legends");
t--;
}
cin.close();
}
}

本文介绍了一种使用Java实现的大数平方根算法,并应用该算法判断一个数及其前n-1个自然数之和是否为完全平方数。通过具体的代码示例,展示了如何处理大数运算,解决传统数据类型无法处理的精度问题。
2866

被折叠的 条评论
为什么被折叠?



