整数値の各桁の値の和を求める方法を確認しておこう!
問題概要
整数 を十進法で表したときの各桁の数字の和が、
を割り切るとき、
をハーシャッド数という。
与えられた整数 がハーシャッド数であるかどうかを判定せよ。
解法
整数 の各桁の値を求めるには、次のようにすればよいです。
が 0 になるまで、次のことを繰り返す
を 10 で割った余りを求める
を 10 で割った商に置き換える
たとえば、 のとき、次のようになります。
を 10 で割った余りは 7(一の位の値)
を 10 で割った商に置き換えると
になる
を 10 で割った余りは 4(十の位の値)
を 10 で割った商に置き換えると
になる
を 10 で割った余りは 3(百の位の値)
を 10 で割った商に置き換えると
になる
を 10 で割った余りは 5(千の位の値)
を 10 で割った商に置き換えると
になる
- 0 になったので終了
この手続きを踏むことで、 の各桁の値である 7, 4, 3, 5 を取得できます。あとは、これを足せばよいでしょう。
そして、各桁の和を求めたら、それでもとの整数が割り切れるかどうかを判定しましょう。
コード
#include <bits/stdc++.h> using namespace std; int main() { int N; cin >> N; int original_N = N; int sum = 0; while (N > 0) { sum += N % 10; N /= 10; } // 判定する(N の値は変わってしまっているので、予めコピーした値 original_N で判定) if (original_N % sum == 0) cout << "Yes" << endl; else cout << "No" << endl; }