SRM 451 DIV1 Easy - MagicalSource x

問題


http://community.topcoder.com/stat?c=problem_statement&pm=10635&rd=13905

ある整数が与えられ、下のように同じ数が段になって足されているとき、
そのような元の数の最小値を求める。
 12
12
ーーー
132

解き方


最後の一桁を固定して、すべての元の数の桁数で全探索して・・・と
考えたくなるが、段になって足されているということは
元の数に11、111、1111・・・のいずれかの数が
かけられたものになる。

よって、1、11、111・・・と割っていき
割りきれるもののうち最小の商が答えになる。

コード


class MagicalSource {

public: long long calculate(long long x) {
long long ret=x;

long long p=1LL;
while(p<x){
p=p*10+1;
if(x%p==0)ret=min(ret,x/p);
}

return ret;
}

};

Share this

Related Posts

Previous
Next Post »