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); } } };