ほぼ静的な計画法

競技プログラミングで解いた問題の解法とコードを晒していくページ。ややマイナーなC♯。

AOJ 0233 (Book Arrangement : 図書整理)

【問題】

https://onlinejudge.u-aizu.ac.jp/problems/0233

http://judge.u-aizu.ac.jp/onlinejudge/description.jsp?id=0233

【解説】

入力された整数aを-10進数変換する問題。まず、基数が負でない場合のn進数変換は、以下の手順となる。

  1. aをnで割る。
  2. 1.の剰余をスタックに保持する。
  3. 1.の商を新たなaとする。
  4. 1.~3.をaが0となるまで繰り返す。
  5. スタックの内容を出力する。

しかし、今回のケースでは基数が負数のため、言語によっては、上記、1.の剰余が負の数となる場合がある。

(参考:除法の原理 - Wikipedia

そのため、剰余が負数となる場合は正数に変換するため、剰余に10(=基数の正数)を加え、商に1を加える処理を追加した(※)。

※-10×q+r = -10×(q+1)+(r+10)であるため、商と剰余の関係性は崩れない。

【コード】