問題
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;
}
};
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;
}
};