■
人気だ。
-
-
-
- -
-
-
昨日の、オーバーフローが原因なので「if(power < 0) break;」って1行書けば解決じゃないか、ってのを試してみた。システムテスト通った。つまり事前に気づいてこの1行を入れていれば部屋内1位になって賞金をもらえていた。TopCoderってマクロでショートコーディングしたり人のコードをチェックして撃墜するところに注目が集まりがちだけど、人間が間違えやすいパターンを把握してそこをきちんとテストするようにするのが一番の近道なんじゃないかという気がする。
-
-
-
- -
-
-
人間は本質的に間違える生き物だから、同じ間違いを二度しないためには、人間に同じことをさせてはいけないのだ。とか言ってみる。
// long longでのpow. #include<boost/optional.hpp> using namespace boost; typedef long long LL; typedef optional<LL> OLL; OLL llpow(LL n, size_t m){ LL result = 1LL, tmp; for(size_t i=0; i<m; i++){ tmp = result * n; if(tmp / n != result){ // overflow return OLL(); } result = tmp; } return OLL(result); } OLL llpow(OLL n, size_t m){ if(n) return llpow(*n, m); return n; } int main() { for(size_t i=0; i<12; i++){ OLL p = llpow(100, i); if(p){ cout << *p << endl; }else{ cout << "overflow" << endl; } } } -----出力----- 1 100 10000 1000000 100000000 10000000000 1000000000000 100000000000000 10000000000000000 1000000000000000000 overflow overflow
これを使えば同じ過ちはしない!