POJ 2847 - The Cubic End
http://poj.org/problem?id=2847
概要
末尾の桁が 1, 3, 7, 9 であるような N 桁の数が与えられる. このような数は,ある値を3乗した末尾 N 桁がその数になるような値が必ず存在することが知られているので,その値を答える.
制約
- 1 <= テストケース数 <= 1000
- N <= 10
解法
下の桁から順に埋めていくだけ.
最大で ( 10^10 )^3 くらいを計算することになるので,BigInteger を使うと楽.
poj/2847.java1 import java.util.*; 2 import java.io.*; 3 import java.math.*; 4 5 public class Main { 6 public static void main(String[] args) { 7 Scanner cin = new Scanner(System.in); 8 int T = cin.nextInt(); 9 while (T-- > 0) { 10 String s = cin.next(); 11 char[] cs = s.toCharArray(); 12 BigInteger ans = BigInteger.ZERO; 13 BigInteger e = BigInteger.ONE; 14 for (int i = 0; i < cs.length; i++) { 15 for (int j = 0; j < 10; j++) { 16 BigInteger t = BigInteger.valueOf(j).multiply(e).add(ans); 17 BigInteger n = t.pow(3); 18 String sn = n.toString(); 19 if (i < sn.length() && sn.charAt(sn.length()-1-i) == cs[cs.length-1-i]) { 20 ans = t; 21 } 22 } 23 e = e.multiply(BigInteger.TEN); 24 } 25 System.out.println(ans); 26 } 27 } 28 }