■0110 Alphametic
Xを0~9に変えて全部試すだけ.ただし,左端がXかつX=0となるようなケースに注意する必要がある.桁が大きそうなので,BigIntegerを使用した.
import java.util.*; import java.lang.*; import java.math.*; import java.io.*; import static java.lang.Math.*; import static java.util.Arrays.*; public class Main{ Scanner sc=new Scanner(System.in); int INF=1<<28; double EPS=1e-9; String e1, e2, e3; int x; void run(){ for(; sc.hasNext();){ String[] ss=sc.nextLine().split("[+]"); e1=ss[0]; ss=ss[1].split("="); e2=ss[0]; e3=ss[1]; solve(); } } void solve(){ for(x=0; x<10; x++){ if(x==0){ if(e1.length()>1&&e1.charAt(0)=='X') continue; if(e2.length()>1&&e2.charAt(0)=='X') continue; if(e3.length()>1&&e3.charAt(0)=='X') continue; } if(toBI(e1).add(toBI(e2)).compareTo(toBI(e3))==0){ println(""+x); return; } } println("NA"); } BigInteger toBI(String s){ BigInteger bi=BigInteger.ZERO; for(char c : s.toCharArray()){ if(c=='X'){ bi=bi.multiply(BigInteger.TEN).add(new BigInteger(""+x)); }else{ bi=bi.multiply(BigInteger.TEN).add(new BigInteger(""+c)); } } return bi; } void debug(Object... os){ System.err.println(Arrays.deepToString(os)); } void print(String s){ System.out.print(s); } void println(String s){ System.out.println(s); } public static void main(String[] args){ // System.setOut(new PrintStream(new BufferedOutputStream(System.out))); new Main().run(); } }
0 件のコメント:
コメントを投稿