두 개의 숫자 num_1과 num_2가 주어졌을 때, 이 두 숫자를 더하는 과정에서 발생하는 캐리(받아올림) 연산의 횟수를 구하는 것이 목표입니다. 예를 들어 123과 157을 더하면 캐리 연산은 1번 발생합니다. (7+3=10, 1+2+5=8, 1+1=2)
예시로 이해하기
입력 − num_1=432, num_2=638
출력 − 두 숫자를 더하는 데 필요한 캐리 연산 횟수: 2
설명 − 오른쪽에서 왼쪽으로 자릿수를 더하며 캐리를 세면 다음과 같습니다.
(2+8=10, carry 1 ) count=1, (3+3+1=7, carry 0 ) count=1, (4+6=10, carry 1 ) count=2
입력 − num_1=9999, num_2=111
출력 − 두 숫자를 더하는 데 필요한 캐리 연산 횟수: 4
설명 − 오른쪽에서 왼쪽으로 자릿수를 더하며 캐리를 세면 다음과 같습니다.
(9+1=10, carry 1 ) count=1, (9+1+1=11, carry 1 ) count=2, (9+1+1=11, carry 1 ) count=3, (9+0+1=10, carry 1 ) count=4
프로그램에 사용된 접근 방식
두 숫자를 각각 문자열로 변환한 뒤, 문자열의 끝(일의 자리)부터 순회하면서 각 문자를 정수로 바꾸어 더하고, 여기에 이전 단계의 캐리 값(첫 번째 반복에서는 0)까지 함께 더합니다. 그 합이 10 이상이면 캐리를 1로 설정하고 캐리 카운트를 증가시키며, 그렇지 않으면 다음 반복을 위해 캐리를 0으로 초기화합니다.
두 숫자를
num_1과num_2로 입력받습니다.함수
carry_add_two_numbers(num_1, num_2)는 두 숫자를 받아 덧셈 시 필요한 캐리 횟수를 반환합니다.to_string(x)함수를 사용해 두 숫자를 문자열로 변환하여str_1과str_2에 저장합니다.length()함수로 두 문자열의 길이를 구해length_str_1과length_str_2에 저장합니다.초기 count와 초기 carry는 모두 0으로 설정합니다.
두 문자열의 길이 중 하나라도 0이 아닌 동안 반복합니다.
각 문자열의 마지막 문자를 정수로 변환하여 변수
i와j에 저장합니다.두 문자열의 길이를 각각 1씩 줄입니다.
i + j + carry를 계산하여 변수add에 저장합니다.add가 10 이상이면 count를 증가시키고(캐리 발생) carry를 1로 설정합니다. 그렇지 않으면 다음 반복을 위해 carry를 0으로 설정합니다.모든 반복이 끝나면 count에는 총 캐리 횟수가 저장됩니다.
count를 결과로 반환합니다.
예제 코드
#include <bits/stdc++.h>
using namespace std;
int carry_add_two_numbers(int num_1, int num_2){
string str_1 = to_string(num_1);
int length_str_1 = str_1.length();
string str_2 = to_string(num_2);
int length_str_2 = str_2.length();
int count = 0, carr = 0;
while(length_str_1 != 0 || length_str_2 != 0){
int i = 0, j = 0;
if (length_str_1 > 0){
i = str_1[length_str_1 - 1] - '0';
length_str_1--;
}
if (length_str_2 > 0){
j = str_2[length_str_2 - 1] - '0';
length_str_2--;
}
int add = i + j + carr;
if (add >= 10){
carr = 1;
count++;
}
else{
carr = 0;
}
}
return count;
}
int main(){
int num_1 = 234578;
int num_2 = 1234;
int count = carry_add_two_numbers(num_1, num_2);
cout<<"Count of number of carry operations required to add two numbers are: "<<count;
return 0;
}출력
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Count of number of carry operations required to add two numbers are: 2
참고로 위 예제에서 234578 + 1234를 계산해 보면, 일의 자리에서 8+4=12로 첫 번째 캐리가 발생하고, 십의 자리에서 7+3+1=11로 두 번째 캐리가 발생하므로 총 캐리 횟수는 2가 됩니다. 이처럼 문자열 변환과 뒷자리부터의 순회만으로도 손쉽게 캐리 연산 횟수를 계산할 수 있습니다.