ACM-ICPC 2018 焦作赛区网络预赛 J 大数开方

题目链接


题意:给定一个数 n n n,判断 n n n n ( n − 1 ) / 2 n(n-1)/2 n(n1)/2是否是完全平方数


思路:
使用Java的BigInteger,对这两个数开方以后,再对得到的数进行平方,判断是否相等。

所以套上一个大数开方的模板即可。


代码:

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.Scanner;

public class Main {
	  static Scanner cin;
	  
	  public static boolean check(BigInteger now){
		  	if (now.compareTo(BigInteger.ZERO) == 0 || now.compareTo(BigInteger.ONE) == 0) return true;
		  	if (now.mod(BigInteger.valueOf(3)).compareTo(BigInteger.valueOf(2)) == 0) return false;
		  	
		  	
			String s = now.toString();
			if(s.length()%2==0) s = s.substring(0,s.length()/2+1);
			else 				s = s.substring(0,(1+s.length())/2);
			
			BigInteger res = BigInteger.ZERO;
			BigInteger m = new BigInteger(s);
			BigInteger two = new BigInteger("2");
			if(s == "1") res = BigInteger.ONE;
			else{
				while(now.compareTo(m.multiply(m)) < 0){
					 m = (m.add(now.divide(m))).divide(two);
				}
				res = m;
			}
			
			if (res.multiply(res).compareTo(now) == 0) return true;
			return false;
	  }
	
	  public static void main(String argv[]){
		 cin = new Scanner(System.in);
		 BigInteger n, m;
		 int T = cin.nextInt();
		 while (T > 0) {
			 T--;
			 n = cin.nextBigInteger();
			 m = n.multiply(n.subtract(BigInteger.ONE)).divide(BigInteger.valueOf(2));
			 
			 boolean flag1 = check(n), flag2 = check(m);
			 if (flag1 && flag2) System.out.println("Arena of Valor");
			 else if (flag1)	 System.out.println("Hearth Stone");
			 else if (flag2)     System.out.println("Clash Royale");
			 else 				 System.out.println("League of Legends");
		 }
	  }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值