작성일 :

문제 링크

4388번 - 받아올림

설명

두 수를 더할 때 받아올림이 발생하는 횟수를 구하는 문제입니다.

0 0이 입력되면 종료합니다.


접근법

1의 자리부터 각 자릿수를 더하며 받아올림 여부를 확인합니다.

자릿수 합과 이전 받아올림의 합이 10 이상이면 받아올림이 발생합니다.

입력이 10자리까지 가능하므로 64비트 정수를 사용합니다.


Code

C#

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
using System;

class Program {
  static void Main() {
    while (true) {
      var line = Console.ReadLine()!.Split();
      var a = long.Parse(line[0]);
      var b = long.Parse(line[1]);
      if (a == 0 && b == 0) break;

      var carry = 0;
      var cnt = 0;
      while (a > 0 || b > 0) {
        var da = (int)(a % 10);
        var db = (int)(b % 10);
        if (da + db + carry >= 10) {
          cnt++;
          carry = 1;
        } else carry = 0;
        a /= 10;
        b /= 10;
      }
      Console.WriteLine(cnt);
    }
  }
}

C++

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <bits/stdc++.h>
using namespace std;

typedef long long ll;

int main() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);

  while (true) {
    ll a, b;
    if (!(cin >> a >> b)) break;
    if (a == 0 && b == 0) break;

    int carry = 0, cnt = 0;
    while (a > 0 || b > 0) {
      int da = a % 10;
      int db = b % 10;
      if (da + db + carry >= 10) {
        cnt++;
        carry = 1;
      } else carry = 0;
      a /= 10;
      b /= 10;
    }
    cout << cnt << "\n";
  }

  return 0;
}