SRM 367 250pt: ObtainingDigitK

問題概要

50桁以下の数字が与えられる。最小でいくつ加えたらある数字Kが出てくるか求める問題。

考えたこと

  • 1の位見るだけじゃないか。
  • 当然繰り上がりとか考慮してないから落ちる。
  • 多倍長の計算とかしたくないのでJavaで書く。通った。

practiceで通ったコード

計算量だいたい定数。(ホントは桁数分くらい)。

import java.math.BigInteger;

public class ObtainingDigitK{

    public int minNumberToAdd(String orig, int k){
        for(int i=0; i<10; i++){
            BigInteger a = new BigInteger(orig);
            a = a.add(BigInteger.valueOf(i));
            String str = a.toString();
            for(int j=0; j<str.length(); j++){
                if(str.charAt(j) == (char)(k + '0')) return i;
            }
        }
        return -1;
    }

}