Computer >> 컴퓨터 >  >> 프로그래밍 >> C++

C++로 정수의 자릿수 곱과 합의 차이 구하는 방법

하나의 정수가 주어졌을 때, 각 자릿수의 을 구한 뒤, 두 값의 차이를 계산하는 문제를 살펴보겠습니다.

예를 들어 숫자가 5362라고 가정해 보겠습니다. 자릿수의 합은 5 + 3 + 6 + 2 = 16이고, 자릿수의 곱은 5 × 3 × 6 × 2 = 180입니다. 따라서 두 값의 차이는 다음과 같습니다.

180 − 16 = 164

해결 접근 방법

이 문제는 매우 간단하게 해결할 수 있습니다. 숫자를 한 자릿수씩 분리하면서 각 자릿수를 누적으로 더하고 곱한 후, 마지막에 곱에서 합을 빼주면 됩니다.

구체적인 과정은 다음과 같습니다.

  1. 숫자를 10으로 나눈 나머지(%)를 이용해 가장 뒤쪽 자릿수를 추출합니다.
  2. 추출한 자릿수를 합(sum)에 더하고, 곱(prod)에 곱합니다.
  3. 숫자를 10으로 나누어(정수 나눗셈) 다음 자릿수로 이동합니다.
  4. 숫자가 0이 될 때까지 반복합니다.

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);
}

입력

5362

출력

164

코드 설명

코드의 핵심 로직은 for(int t = n; t; t /= 10) 반복문입니다. 조건식의 t는 t가 0이 아닌 동안 반복을 의미하며, 각 반복마다 t % 10으로 마지막 자릿수를 얻어 합과 곱에 반영한 뒤, t /= 10으로 해당 자릿수를 제거합니다.

이 알고리즘은 숫자의 자릿수 개수만큼만 반복하므로 시간 복잡도는 O(log₁₀n), 즉 자릿수 길이에 비례하며 공간 복잡도는 O(1)로 매우 효율적입니다.