문제 링크 : www.acmicpc.net/problem/10757
내 풀이(2021.1.4.) :
#include <iostream>
#include <string>
using namespace std;
int a[1251]; // A
int b[1251]; // B
string c[1251]; // 결과
// 1~8글자짜리 int를 8글자짜리 string으로 변환
string num2str(int num) {
string str = to_string(num);
string result = "00000000";
for (int i = 0; i < str.size(); i++) {
result[8 - str.size() + i] = str[i];
}
return result;
}
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
// A, B 초기화
string A, B; cin >> A >> B;
for (int i = 1250; i >= 0; i--) {
int index = A.size() - 8 * (1251 - i);
if (index >= 0) {
a[i] = stoi(A.substr(index, 8));
}
else if (index > -8) {
a[i] = stoi(A.substr(0, 8 + index));
}
index = B.size() - 8 * (1251 - i);
if (index >= 0) {
b[i] = stoi(B.substr(index, 8));
}
else if (index > -8) {
b[i] = stoi(B.substr(0, 8 + index));
}
}
// C 초기화
for (int i = 0; i < 1251; i++) {
c[i] = "00000000";
}
/*
for (int i = 0; i < 1251; i++) {
cout << a[i];
}
for (int i = 0; i < 1251; i++) {
cout << b[i];
}
*/
// C = A + B
for (int i = 1250, up = 0; i >= 0; i--) {
int temp_a = a[i];
int temp_b = b[i];
int temp = temp_a + temp_b + up;
if (temp < 100000000) up = 0;
else up = 1;
c[i] = num2str(temp%100000000);
}
// 처음으로 0이 아닌 string의 인덱스 찾기
int index = -1;
for (int i = 0; i < 1251; i++) {
for (int j = 0; j < 8; j++) {
if (c[i][j] != '0') {
index = i;
break;
}
}
if (index != -1) break;
}
cout << stoi(c[index]); // 처음으로 0이 아닌 string 출력
// 나머지 출력
for (int i = index + 1; i < 1251; i++) {
cout << c[i];
}
return 0;
}
큰 수를 8글자 단위로 쪼개 계산하였다.
string 타입과 int 타입으로 변환하면서
숫자 0의 처리에 유의하였다.
파이썬은 큰 수 연산 라이브러리가 제공되지만
C++은 제공되지 않아 직접 연산 알고리즘을 구현해야 했다.
'알고리즘 > 구현' 카테고리의 다른 글
백준 14503번 : 로봇 청소기 (0) | 2021.01.10 |
---|---|
백준 14891번 : 톱니바퀴 (0) | 2021.01.03 |
백준 2167번 : 2차원 배열의 합 (0) | 2021.01.02 |
백준 1475번 : 방 번호 (0) | 2021.01.01 |
코딩 테스트에서 '구현' 카테고리는 무엇일까요? (0) | 2021.01.01 |