このTopCoderの問題はこちらで見ることができる(要TopCoder登録 & 問題文は英語)。問題文についておおまかに説明する。
ある数字がmulti numberであるというのは、その数字の10進数の表現を2つの数字に分けたときに、二つの数字の各桁の積が等しくなるものがあるということである。例えば、1221という数字は12と21に分ければ、各桁の積は共に2となり、これはmulti numberである。同様に1236もmulti numberとなるが(訳注:123と6に分ければよい)、1234はそうはならない。なお、2つの数に分けるとき、どちらの数も少なくとも1桁以上でなければならないことに注意。つまり12345という数字があれば、1-2345, 12-345, 123-45, 1234-5という4通りの分け方が存在することになる。さて、numberという数字が与えられたとき、multi numberであれば、"YES"、そうでなければ"NO"を返すようなメソッドを作成せよ。
私の実装はこちら。
public class MultiNumber { public String check(int number) { String snum = "" + number; for( int i=1 ; i<snum.length() ; i++ ){ int left = multiplyDigits(snum.substring(0, i)); int right = multiplyDigits(snum.substring(i)); if( left == right ) return "YES"; } return "NO"; } private int multiplyDigits(String s){ // 分けられた数字の各桁の積を計算 int ret = 1; for( int i=0 ; i<s.length() ; i++ ){ ret *= (s.charAt(i) - '0'); } return ret; } }
得点は241.10/250、1回のsubmitでシステムテストクリア。中央値は約169点。
0 件のコメント:
コメントを投稿