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 を出力します。
2,3,4,5,11,12,13,14,20
なので、これらの総和である 84 を出力します。
84
動作が気になりましたらpaiza.ioなどで上記のコードをテストしてみてください。