Official

B - Subscribers Editorial by cn449


\(N\)\(10^d\) の位を切り捨てることは、

  • \(N\)\(10^{d+1}\) で割った余りを \(M\) として、\(N\)\(N-M\) に置き換える
  • \(N\) を文字列と捉え、\(4\) 文字目以降をすべて 0 に置き換える

などというように言い換えができます。

したがって、以下のような実装例で正解を得ることができます。

実装例 1

#include <iostream>
using namespace std;

int main() {
	int n;
	cin >> n;
	if (n < 1000) cout << n << '\n';
	if (1000 <= n && n <= 9999) cout << n - n % 10 << '\n';
	if (10000 <= n && n <= 99999) cout << n - n % 100 << '\n';
	if (100000 <= n && n <= 999999) cout << n - n % 1000 << '\n';
	if (1000000 <= n && n <= 9999999) cout << n - n % 10000 << '\n';
	if (10000000 <= n && n <= 99999999) cout << n - n % 100000 << '\n';
	if (100000000 <= n && n <= 999999999) cout << n - n % 1000000 << '\n';
}

実装例 2

#include <iostream>
using namespace std;
constexpr ll ten(int n) { return n ? 10 * ten(n - 1) : 1; };

int main() {
	int n;
	cin >> n;
	if (n < 1000) cout << n << '\n';
	for (int i = 1; i <= 6; i++) if (ten(i + 2) <= n && n < ten(i + 3)) cout << n - n % ten(i) << '\n';
}

実装例 3

#include <iostream>
#include <string>
using namespace std;

int main() {
	string s;
	cin >> s;
	if (s.size() <= 3) cout << s << '\n';
	else cout << s.substr(0, 3) << string(s.size() - 3, '0') << '\n';
}

posted:
last update: