题目是中文的很好懂,存个板子。
板子来自ACdreamers, 改动了一点用于a题。
import java.io.*; import java.util.*; import java.math.*; public class Main { public static void main(String[] args) { Scanner cin = new Scanner(new BufferedInputStream(System.in)); while(cin.hasNext()) { String s = cin.next(); BigInteger n = new BigInteger(s); BigInteger remain = BigInteger.ZERO; BigInteger odd = BigInteger.ZERO; BigInteger 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)); } if(ans.multiply(ans).compareTo(n) < 0) ans.add(BigInteger.ONE); if(ans.remainder(BigInteger.valueOf(2)).compareTo(BigInteger.ONE) < 0) System.out.println(0); else System.out.println(1); } } }