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: