AtCoder Grand Contest 002 A - Range Product

AtCoder Grand Contest 002
A - Range Product

ACした.
Submission #1965649 - AtCoder Grand Contest 002

入力が -109 ≦ a ≦ b ≦ 109 と広すぎる(基本的には負値がなくて 0 ≦ 109 の場合が多く,普段よりずっと広い).
入力の範囲が広すぎる上に,問題文を読むと数じゃなくてもよさそうなので string で入力を受けてどうこうしようかな,という気持ちになれる.
a ≦ b の全部の積の桁数とかだったらやばかったけど,全部の積の正負または 0 を出力するので,とりあえず

  • a が負の数または 0 かつ b が正の数または 0 であれば,範囲に絶対 0 が含まれるので "Zero"
  • a も b も正の数であれば絶対 "Positive"

というのが思いついたので if 文書いて穴埋めしていった.
a も b も負の数の場合は,(-1)^{2n} は 1 みたいなことを思い出しながら,間の個数が分かれば正負が分かるなあと思った.
ただ,引き算はできない(ことはないけど繰り下がりの実装めんどうそう)代わりを考えたら,a と b それぞれの偶奇が分かれば間の個数の偶奇も分かる気がしたので下一桁の mod 2 を比較した.
偶奇が一致すれば間の個数は奇数個で "Negative",不一致であれば偶数個で "Positive" になる.
これは,2(n+1) - 2n = 2,{2(n+1)+1} - {2n+1} = 2 だし,2(n+1) - {2n+1} = 1,{2(n+1)+1} - 2n = 1 だって分かる(解いたときには具体的な数で考えていたので,それっぽく書いてみた)(ので実は分かってなかった).