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

C++에서 두 숫자를 더할 때 필요한 캐리(받아올림) 연산 횟수 계산하기

두 개의 숫자 num_1num_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_1num_2로 입력받습니다.

  • 함수 carry_add_two_numbers(num_1, num_2)는 두 숫자를 받아 덧셈 시 필요한 캐리 횟수를 반환합니다.

  • to_string(x) 함수를 사용해 두 숫자를 문자열로 변환하여 str_1str_2에 저장합니다.

  • length() 함수로 두 문자열의 길이를 구해 length_str_1length_str_2에 저장합니다.

  • 초기 count와 초기 carry는 모두 0으로 설정합니다.

  • 두 문자열의 길이 중 하나라도 0이 아닌 동안 반복합니다.

  • 각 문자열의 마지막 문자를 정수로 변환하여 변수 ij에 저장합니다.

  • 두 문자열의 길이를 각각 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가 됩니다. 이처럼 문자열 변환과 뒷자리부터의 순회만으로도 손쉽게 캐리 연산 횟수를 계산할 수 있습니다.