본문 바로가기

개인공부(c++)

[c/c++] 백준 10757_큰수 A+B

파이썬은 a+b, 자바는 biginteger를 사용해서 문제를 쉽게 해결 가능하나 c++로는 숫자를 문자열로 받아 직접 계산.

 

#include <iostream>
#include <vector>
#include <string>
using namespace std;

int N, sum;
int num1[10001], num2[10002];
string s1, s2, tmp;
vector<int> vec;
	
	
int main(){
	
	cin >> s1 >> s2; //문자열 형태로 s1, s2를 입력받음 
	
	if(s1.size() < s2.size())//문자열 길이 비교해서 두 수중에서 더 큰걸 s1으로 설정 
	{
		tmp = s1;
		s1 = s2;
		s2 = tmp;
	}
	
	for(int i=0; i<s1.size(); i++)
		num1[i+1] = s1[i] - '0';
	
	for(int i=0; i<s2.size(); i++)
		num2[i + 1 + (s1.size()-s2.size())] = s2[i] - '0';

	for(int i=s1.size(); i>0; i--)
	{
		sum = num1[i] + num2[i];
		if (sum >= 10)
		{
			num1[i - 1]++;
			sum -= 10;
		}
		vec.push_back(sum);
	}

	// 맨 앞자리수 출력
	if (num1[0] != 0) cout << 1;

	// vec벡터 거꾸로 출력
	for (int i = vec.size() - 1; i >= 0; i--)
	{
		cout << vec[i];
	}
	
	return 0;
}

 


- c에서 큰 수는 문자열로 받은 후 아스키 코드 성질을 이용해 '0'을 빼줘서 숫자로 바꿔줄수있음

- 코드 실행 시간을 줄이기 위해 scanf, printf를 사용했지만 string 형태의 문자열은 scanf 사용 불가능

- char 배열을 이용해 문자열을 scanf로 받을 수 있지만 공백 나타나면 입력 종료

- gets는 공백문자를 포함해 엔터까지 입력을 받지만 문자열의 끝을 확인하지 않기 때문에 overflow 발생 가능

- vector size(), push_back() 사용