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進数変換は、以下の手順となる。
- aをnで割る。
- 1.の剰余をスタックに保持する。
- 1.の商を新たなaとする。
- 1.~3.をaが0となるまで繰り返す。
- スタックの内容を出力する。
しかし、今回のケースでは基数が負数のため、言語によっては、上記、1.の剰余が負の数となる場合がある。
(参考:除法の原理 - Wikipedia)
そのため、剰余が負数となる場合は正数に変換するため、剰余に10(=基数の正数)を加え、商に1を加える処理を追加した(※)。
※-10×q+r = -10×(q+1)+(r+10)であるため、商と剰余の関係性は崩れない。
【コード】