Rust練習問題:数の整除
問題文 定理:二桁以上の正整数であれば、その一の位を取り除いて、残った数を前記一の位の数字の五倍で割ったら、残りの数が17の倍数の場合かつその場合に限って、元の数も17の倍数である。 例えば、34が17の場合である。なぜなら、3-20=-17が17の倍数である。201は17の倍数ではない。なぜなら、20-5=15は17の倍数ではない。一個正整数nを入力して、あなたの任務はこれが17の倍数であるかを判断することだ。 入力フォーマット 入力ファイルは最多で10セットのテストデータを有する。一セットのテストデータは一行を占める。その行は一個の整数n(1<=n<=10^100)のみがあり、判断待ちの正整数を表す。n=0であれば、終了を意味し、この行を処理すべきではない。 出力フォーマット 一セットのテストデータに対して一行を出力して、相応のnが17の倍数であるかを表す。1が肯定を表し、0が否定を表す。 入力サンプル 出力サンプル 分析 この問題の難点は、nの範囲にある。64-bitの整数型を使っても、表示範囲が最大で20桁の十進数くらいになる。100桁まで昇るnとしても使えない。つまり、プログラミング言語のビルトイン型では、nを表現できない。したがって、nを表現できる型またはそれに類するものを作らないといけない。 また、前記定理によると、nが17の倍数であるかは、nより一桁小さい別の整数で判定できる。 つまり、$n=n_0$が17の倍数という問題が下記の問題に相当する。・$n_1$が17の倍数であるか、さらに次の問題に相当する。・$n_2$が17の倍数であるか、さらに次の問題に相当する。・$n_3$が17の倍数であるか、さらに次の問題に相当する。・……そして、$n_1 > 10 n_2 > 10^2 n_3 > 10^3 n_4 > ……$.