[백준 4388] 받아올림 (C#, C++) - soo:bak
작성일 :
문제 링크
설명
두 수를 더할 때 받아올림이 발생하는 횟수를 구하는 문제입니다.
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;
}