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

C++로 숫자의 0을 모두 제거한 후 a + b = c가 성립하는지 확인하는 방법

세 개의 숫자 a, b, c가 주어졌을 때, 각 숫자에서 0을 모두 제거한 후에도 a + b = c가 성립하는지 확인해야 합니다. 예를 들어 a = 102, b = 130, c = 2005라고 가정해 보겠습니다. 각 숫자에서 0을 제거하면 a + b = c는 (12 + 13 = 25)가 되므로 이 식은 참이 됩니다.

문제를 해결하는 접근 방식은 매우 간단합니다. 먼저 숫자에서 모든 0을 제거하는 함수를 작성하고, 그 변환된 값들을 사용하여 a + b = c가 여전히 성립하는지 검사하면 됩니다.

알고리즘 동작 원리

deleteZeros 함수는 숫자의 마지막 자릿수부터 한 자리씩 확인하면서, 해당 자릿수가 0이 아닌 경우에만 결과 값에 더합니다. 이때 place 변수는 현재 자릿수의 위치(1, 10, 100...)를 추적하여 0이 제거된 자릿수들이 올바른 순서로 배치되도록 합니다. 이후 isSame 함수에서 세 숫자를 각각 변환한 뒤 등식이 성립하는지 비교합니다.

예제 코드

#include <iostream>
#include <algorithm>
using namespace std;
int deleteZeros(int n) {
    int res = 0;
    int place = 1;
    while (n > 0) {
        if (n % 10 != 0) { // 마지막 자릿수가 0이 아니라면
            res += (n % 10) * place;
            place *= 10;
        }
        n /= 10;
    }
    return res;
}
bool isSame(int a, int b, int c){
    if(deleteZeros(a) + deleteZeros(b) == deleteZeros(c))
        return true;
    return false;
}
int main() {
    int a = 102, b = 130, c = 2005;
    if(isSame(a, b, c))
        cout << "a + b = c is maintained";
    else
        cout << "a + b = c is not maintained";
}

출력 결과

a + b = c is maintained

실행 결과 a = 102, b = 130, c = 2005에서 0을 제거하면 각각 12, 13, 25가 되고, 12 + 13 = 25가 성립하므로 등식이 유지됨을 확인할 수 있습니다. 이 알고리즘은 숫자의 자릿수만큼 반복하므로 시간 복잡도는 O(log₁₀n)입니다.