■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 件のコメント:
コメントを投稿