modNum
とっさに書いた。今お持ち帰り環境が無いのでここにメモ。
リングバッファのポインタの差計算で毎回あちこちで moduloとるのがアホらしくなった為。
template <int _mod = 10> class modNum { int a; public: modNum(int val = 0) : a(val){} static int normalize(int a) { return (a < 0) ? _mod + (a % _mod) : a % _mod; } modNum& operator ++() { a = normalize(a+1); return *this; } modNum& operator --() { a = normalize(a-1); return *this; } modNum& operator +(int b) { return *(new modNum<_mod>( normalize(a+b))); } modNum& operator -(int b) { return *(new modNum<_mod>( normalize(a-b))); } modNum& operator *(int b) { return *(new modNum<_mod>( normalize(a*b))); } modNum& operator /(int b) { return *(new modNum<_mod>( normalize(a/b))); } modNum& operator =(const modNum& b) { a = normalize(b.a); return *this; } modNum& operator =(const int b) { a = normalize(b); return *this; } operator int() { return a; } };