ABC083B Some Sums

Some Sums

ABC083B Some Sums
AtCoder Beginners Selectionより。
1以上N以下の整数のうち、各桁の和がA以上B以下であるものの総和を求めよ、という問題です。
引数n, a, bを取る関数digsumを先に定義して条件に合う数の総和を返すようにしてあります。
「数字の各桁をどのように扱うか」ということについてのチュートリアル問題かと思います。

#include <iostream>

// geschrieben von Beliar698ma

int digsum(int n, int a, int b) {
  int result = 0; //出力する結果 

  for (int i = 0; i <= n; i++) {
    int sum = 0; //各桁の和
    int num = i; //検査対象の数
    while (num) {
      sum += num % 10;
      num /= 10; //num の各桁を足し合わせる計算
    }
    if (a <= sum && sum <= b) {
      result += i; //numの各桁の和がa以上b以下ならresultに現在の検査対象の数を加算代入
    }
  }
  return result; //結果を返す
}

int main() {
  int n, a, b;
  std::cin >> n >> a >> b;
  
  std::cout << digsum(n, a, b) << "\n";
  
}

入力例(標準入力)

20 2 5
        

出力例(標準出力)

20 以下の整数のうち、各桁の和が 2 以上 5 以下なのは
2,3,4,5,11,12,13,14,20
なので、これらの総和である 84 を出力します。
84
        

動作が気になりましたらpaiza.ioなどで上記のコードをテストしてみてください。