SRM 454 DIV1 Easy - DoubleXor x

問題


http://community.topcoder.com/stat?c=problem_statement&pm=10706&rd=13908

^^で表される演算がある。
これは10進数で表される各桁のXORをとった後にその10の余りが
各桁の数になる。

整数Nが与えられた時、N^^(N-1)^^(N-2)…^^1の値を求める。

解き方


1からたどっていくと法則のようなものが見つかるが、
実際は(N^^(N^1))^^(N-1) とN^^((N^1)^^(N-1))は異なるためこの方法では解けない。

計算量は間に合うので、題意の通り実装して解く。

コード


class DoubleXor {

public:

int calc(int x,int y){
int ret=0;
for(int p=1;x>0||y>0;x/=10,y/=10,p*=10){
ret+=(((x%10)^(y%10))%10)*p;
}
return ret;
}

int calculate(int N) {
int ret=N;
for(int i=N-1;i>=1;i--){
ret=calc(ret,i);
}
return ret;
}

};

Share this

Related Posts

Previous
Next Post »