C++で整数の各桁の積と和の差を求める方法
ある整数が与えられたとき、その各桁の合計(和)と積をそれぞれ求め、両者の差を計算する問題を考えてみましょう。
例えば、数値が 5362 の場合を考えてみます。
- 桁の和:5 + 3 + 6 + 2 = 16
- 桁の積:5 × 3 × 6 × 2 = 180
したがって、求める差は 180 − 16 = 164 となります。
解き方のアプローチ
この問題は、以下の手順で解くことができます。
- 数値を10で割った余り(
% 10)を使って、下の桁から1桁ずつ取り出します。 - 取り出した各桁を、和を求める変数に加算し、積を求める変数に乗算していきます。
- 数値が0になるまで10で割り続け、すべての桁を処理します。
- 最後に「積 − 和」を計算して返します。
実装例
それでは、実際のC++コードを見てみましょう。
#include <bits/stdc++.h>
using namespace std;
class Solution {
public:
int subtractProductAndSum(int n) {
int prod = 1;
int sum = 0;
for(int t = n; t; t /= 10){
sum += t % 10;
prod *= t % 10;
}
return prod - sum;
}
};
main(){
Solution ob;
cout << ob.subtractProductAndSum(5362);
}コードの解説
- prod = 1:積の初期値は1です(0にすると掛け算の結果がすべて0になってしまうため)。
- sum = 0:和の初期値は0です。
- forループ:条件
tが0以外の間、ループを続けます。各反復でt % 10により最下位の桁を取得し、和に加算すると同時に積に乗算します。その後、t /= 10で数値を1桁右にずらします。 - 戻り値:すべての桁を処理し終えたら、
prod - sumを返します。
このアルゴリズムの計算量は、桁数に比例する O(log n) であり、非常に効率的です。
入力
5362
出力
164
-
C++で桁の合計に基づいて数値をソートする方法
この記事では、各数値の「桁の合計(各桁の数字を足した値)」に基づいて数値を並べ替える方法を解説します。桁の合計が小さい数値ほど先頭に配置され、合計が大きい数値ほど後ろに配置されます。ソートの例例として、次のようなデータを考えてみましょう。data = {14, 129, 501, 23, 0, 145}このデータを桁の合計順にソートすると、以下のようになります。0 → 桁の合計は 014 → 桁の合計は 1 + 4 = 523 → 桁の合計は 2 + 3 = 5501 → 桁の合計は 5 + 0 + 1 = 6145 → 桁の合計は 1 + 4 + 5 = 10129 → 桁の合計は 1 +
-
C++で数値の各桁の合計を計算するプログラム
ここでは、C++言語を使用して入力された整数の各桁の合計を計算する方法を紹介します。剰余演算子と整数除算を組み合わせたシンプルなアルゴリズムで実装できます。 プログラム例 #include<iostream> using namespace std; int main() { int x, s = 0; cout << Enter the number : ; cin >> x; while (x != 0) {