PS/BOJ

[백준 BOJ] 10757 큰 수 A+B

Jubil 2019. 8. 12. 18:39
반응형

링크

https://www.acmicpc.net/problem/10757

 

풀이

 

숫자를 자릿수마다 배열에 담습니다.

반복문을 이용해서 한 자리씩 계산해줍니다. 여기서 carry bit를 만들어서 받아올림을 구현해줍니다.

마지막에 출력해줍니다.

코드 보고 이해하는 게 더 빠를 것 같아요!

 

이 방법은 carry, 즉 받아올림이 1이 넘지 않아서 쉽게 해결할 수 있습니다.

이를 응용하면 2의 n승을 빠르게 구할 수 있습니다.

 

코드

//10757_큰 수 A+B
#include <iostream>
#include <algorithm>
#include <string>
using namespace std;

int a[10004], b[10004], sum[10004], carry;
string str1, str2;

int main() {
	cin >> str1 >> str2;		//입력 받음

	for (int i = 0; i < str1.length(); ++i) {		//배열에 저장
		char tmp = str1.at(i);
		a[str1.length() - i] = atoi(&tmp);
	}
	for (int i = 0; i < str2.length(); ++i) {		//배열에 저장
		char tmp = str2.at(i);
		b[str2.length() - i] = atoi(&tmp);
	}
	for (int i = 1; i <= max(str1.length(), str2.length()); ++i) {	//한 자리씩 계산
		sum[i] = a[i] + b[i] + carry;			//a 숫자와 b 숫자와 carry 더함
		if (sum[i] >= 10) {						//10이 넘었다면 앞으로 올려줘야 함
			sum[i] -= 10;						
			carry = 1;
		}
		else carry = 0;
	}

	if (carry) cout << 1;						//마지막까지 계산했는데 carry가 있다면 출력
	for (int i = 0; i < max(str1.length(), str2.length()); ++i) {		//sum에 계산한 거 역순으로 출력
		cout << sum[max(str1.length(), str2.length())-i];
	}

	return 0;
}

반응형

'PS > BOJ' 카테고리의 다른 글

[백준 BOJ] 1316 그룹 단어 체커  (0) 2019.08.12
[백준 BOJ] 3052 나머지  (0) 2019.08.12
[백준 BOJ] 14490 백대열  (0) 2019.08.11
[백준 BOJ][deque] 2164 카드2  (0) 2019.08.11
[백준 BOJ] 2312 수 복원하기  (0) 2019.08.11