아이공의 AI 공부 도전기

[Baekjoon] 10757번 큰 수 A+B (C++)

 

     

 

 

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

 

10757번: 큰 수 A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

string 관련 참조하면 좋은 글

https://aigong.tistory.com/259

 

[C++] 문자열 관련 정리 (ASCII, string 헤더파일 함수)

[C++] 문자열 관련 정리 (ASCII, string 헤더파일 함수) 목차 문자열과 관련하여 2가지 방식이 있다고 본다. 1) char array 형태 (배열 형태) 2) #include string -> string str 방식 이와 관련하여 기초적..

aigong.tistory.com

 

c++

숫자가 범주를 넘어서는 경우 string으로 해결해야한다.

 

input1  0번째 1번째 2번째 3번째 4번째
  3 7 8 9 1
input2    0번째 1번째 2번째 3번째
    4 1 4 2
Sum 4 2 0 3 3

 

방법 1 - 2024KB, 0ms, 531B

string으로 계산하기

 

input1  0번째 1번째 2번째 3번째 4번째
  3 7 8 9 1
input2    0번째 1번째 2번째 3번째
    4 1 4 2
Sum 4 2 0 3 3

 

다음과 같은 표가 있을 때 일의 자리 위치부터 차례로 더할 수 있도록 하기 위한 if 문을 먼저 설정한다.

그 후 carry를 통해 10이 넘어갔을 경우 처리하는 경우를 설정한다. 

마지막으로 res에 차례로 string 숫자를 넣는 방향으로 string 덧셈을 완료한다.

 

#include <iostream>
#include <string>
using namespace std;
int main() {    
	string a,b;	
	cin >> a >> b;	
	
	string res(max(a.size(), b.size()), '0');
	bool carry = false;	
	int i, tmp;
	
	for (i=0; i <res.size(); i++){
		tmp = carry;
		carry = false;
		
		if (i < a.size())
			tmp += a[a.size() - i -1] -'0';
		if (i < b.size())
			tmp += b[b.size() - i -1] -'0';
			
		if (tmp >= 10){
			carry = true;
			tmp -= 10;
		}
		
		res[res.size() - i - 1] = tmp + '0';
	}
	
	if (carry)
		res.insert(res.begin(), '1');
	cout << res;		
}

 

방법 2 - 2024KB, 0ms, 804B

 

input1  0번째 1번째 2번째 3번째 4번째
  3 7 8 9 1
input2  0번째 1번째 2번째 3번째 4번째
  0 4 1 4 2
Sum 4 2 0 3 3

 

string 계산이기에 같은 사이즈로 맞추기 위해 '0'을 삽입하는 방법도 있다.

 

#include <iostream>
#include <string>
using namespace std;
int main() {    
	string a, b, l, res;
    cin >> a >> b;
    
    bool carry=false;
    int i, tmp;
    
    if (a.size() > b.size()){
        l = "";
        for (i = 0; i < a.size() - b.size(); i++)
            l += '0';
        b = l + b;
    }
    else{
        l = "";
        for (i = 0; i < b.size() - a.size(); i++)
            l += '0';
        a = l + a;
    }
	
	while (a.size()!=0 && b.size() !=0){
		tmp = carry;
		carry = false;
		tmp += a.back() - '0';
		tmp += b.back() - '0';
        
        if (tmp/10){
        	carry = true;
        	tmp -= 10;
		}
        
        res.insert(res.begin(), tmp + '0');
        a.pop_back();
        b.pop_back();
    }
    if(carry) 
        res.insert(res.begin(), '1');
    cout << res;
}

 

 

방법 3

 

 

 

 

 

 

 

 

파이썬은 10,000자리 정도의 자연수도 자유롭게 다룰 수 있습니다

고로 Python pass

 

 

 

 

 

공유하기

facebook twitter kakaoTalk kakaostory naver band
loading