問題
考察
パターン①場合分けで解く
例えば整数$N$の一の位を切り捨てて出力したい場合、C++であれば以下のコードで切り捨てることができます。($N$は整数型の変数です。)
(N / 10) * 10
一度10で割ることで一の位を切り捨ててもらい、後で10を掛けて期待した値を得るという手順です。
これを応用することで十の位以下、百の位以下・・・でも切り捨てて出力することができます。
これで任意の位以下を切り捨てることができれば、Nの値に沿って場合分けを行うことで題意に沿った値を出力することができます。
パターン②規則性から解く
この問題では、$10^3$以上になると切り捨てが発生します。この切り捨てが$(Nの桁数)-3$桁以下の部分であることが問題文からわかります。そこで最初に$N$の桁数を求め、そこから切り捨てる部分も求めていきます。$N$の桁数を求める関数を事前に用意しておくと役に立ちます。
整数の桁数を求める関数.cpp
int countDigits(int n) {
int res = 0;
while(n > 0) {
res++;
n /= 10;
}
return res;
}
切り捨てについては$1$に$10$を$(Nの桁数)-3$回掛けた値をパターン①で示したコードに当てはめればOKです。
提出コード(コンテスト後)
ご不明点などがあれば教えていただけると幸いです。