TopCoder SRM 367 Div1 Easy ObtainingDigitK

問題

整数nが与えられる。
整数nに非負の整数を加えて、和の各桁の数字のうちどれか一つ以上がkになるようにしたい。
最小でいくつの数を加えればよいか、求めよ。

制約条件

nの桁数≦50
k≦9

方針

9以下を足せば下一桁を必ずkに出来るので、
0〜9までを足してみて、どこかの桁がkになっているかをそれぞれ確かめればよい。


桁数が多いので自分で足し算を書く必要がある。

ソースコード

class ObtainingDigitK {
  public:
  int minNumberToAdd(string o, int k) {
    for(int a=0;;a++){
      rep(i,o.size())if(o[i]-'0'==k)return a;
      o='0'+o;
      o[o.size()-1]++;
      for(int i=o.size()-1, c=0;i>=0;i--){
        o[i]+=c; c=0;
        if(o[i]>'9')c=1, o[i]-=10;
      }
      if(o[0]=='0')o=o.substr(1);
    }
  }
};