[백준 26711] A+B (C#, C++) - soo:bak
작성일 :
문제 링크
설명
얼핏 보면 단순히 두 개의 숫자를 더하는 프로그램을 작성하는 문제로 보입니다.
하지만, 문제의 설명에 따르면 입력으로 주어지는 숫자가 최대 5000
개의 자릿수를 가진다는 조건이 있습니다.
즉, C++
언어의 표준 라이브러리로는 숫자를 표현할 수 있는 방법에 한계가 있습니다.
따라서, 외부 라이브러리를 사용하지 않고 C++
언어로 해당 문제를 풀이하기 위해서는, 문자열을 이용하여 덧셈을 직접 구현해야 합니다.
반면에, C#
언어에서는 System.Numerics
네임스페이스에 정의되어 있는 BigInteger
자료형을 통해 쉽게 해결할 수 있습니다.
C#
언어에서 해당 BigInteger
자료형은 크기에 제한에 없기 때문에, 사용 가능한 메모리가 허용하는 한에서 어떠한 크기의 정수라도 저장할 수 있습니다.
따라서, 아래의 코드 중 C#
언어를 이용한 풀이에서는 BigInteger
자료형을 활용하였고,
C++
언어를 이용한 풀이에서는 문자열을 이용해 직접 덧셈을 구현하여 풀이하였습니다.
Code
[ C# ]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
namespace Solution {
using System.Numerics;
class Program {
static void Main(string[] args) {
var a = BigInteger.Parse(Console.ReadLine()!);
var b = BigInteger.Parse(Console.ReadLine()!);
Console.WriteLine(a + b);
}
}
}
[ 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
31
32
33
34
35
36
37
38
39
40
41
#include <bits/stdc++.h>
using namespace std;
string addNums(const string& a, const string& b) {
string ret = "";
int carryOver = 0, lenA = a.length(), lenB = b.length();
while (true) {
if (lenA <= 0 && lenB <= 0) break ;
int numA = 0, numB = 0;
if (lenA > 0) numA = a[lenA - 1] - '0';
if (lenB > 0) numB = b[lenB - 1] - '0';
int sum = numA + numB + carryOver;
carryOver = sum / 10;
ret += (sum % 10) + '0';
if (lenA > 0) lenA--;
if (lenB > 0) lenB--;
}
if (carryOver > 0) ret += carryOver + '0';
reverse(ret.begin(), ret.end());
return ret;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
string a, b; cin >> a >> b;
cout << addNums(a, b) << "\n";
return 0;
}