公式

B - Sum of Digits Sequence 解説 by cn449


\(x\) に対して \(f(x)\) を返す関数 \(f\) を実装できれば、あとは愚直に問題文で与えられた式に従って \(A_0, A_1, \ldots, A_N\) と順番に値を計算することで答えを求めることができます。

\(f\) の実装のためには、\(x\)\(10\) で割った余りを足し合わせて \(10\) で割ることを繰り返す方法や \(x\) を文字列に変換したものを用いるなどの方法があります。

実装例

#include <bits/stdc++.h>
using namespace std;

int main() {
	int n;
	cin >> n;

	auto f = [&](int x) -> int {
		int res = 0;
		while (x) {
			res += x % 10;
			x /= 10;
		}
		return res;
	};

	vector<int> a(n + 1);
	a[0] = 1;
	for (int i = 1; i <= n; i++) {
		for (int j = 0; j < i; j++) a[i] += f(a[j]);
	}
	cout << a[n] << '\n';
}

投稿日時:
最終更新: