問題
問題文
$1$ 以上 $N$ 以下の整数のうち、$10$ 進法での各桁の和が $A$ 以上 $B$ 以下であるものの総和を求めてください。
制約
・$1 \le N \le 10^4$
・$1 \le A \le B \le 36$
・入力はすべて整数である
収録されている問題セット
回答
"# 回答1 (AC)
整数 n, a, b を受け取った後、変数 i を 1 から n まで変化させ、i の各桁の合計 sum を計算し、それが a 以上 b 以下ならば変数 answer に1を加える、という処理を繰り返します。i の各桁の合計を計算するには、「10 で割った余りを計算 → i を 10 で割った商に置き換える」という処理を繰り返しますが、変数 i の値を変更すると for 文がおかしくなってしまうので、i の値を別の変数 nn にコピーし、nn に上の処理を適用することにします。コードは以下のようになりました。
abc083b-1.cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
int n, a, b;
cin >> n >> a >> b;
int answer = 0;
for ( int i=1; i<=n; i++ ) {
int nn = i, sum = 0;
while ( nn>0 ) {
sum += nn%10;
nn /= 10;
}
if ( a<=sum && sum<=b ) {
answer += i;
}
}
cout << answer << endl;
}
調べたこと
AtCoder に登録したら次にやること
上記の回答で変数 i の値を変数 nn にコピーする代わりに、各桁の合計を計算する関数を使用していました。
AtCoder の解説 → コンテスト全体の解説
回答1と同じ方針でした。
リンク
前後の記事
- 前の記事 → AtCoderログ:0044 - ARC 124 A
- 次の記事 → AtCoderログ:0046 - ARC 124 B