파이썬은 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() 사용
'개인공부(c++)' 카테고리의 다른 글
[C/C++] 그리디 알고리즘 문제풀이 1 (0) | 2022.09.29 |
---|---|
[C/C++]백준 4796_캠프, 그리디 알고리즘 (0) | 2022.09.27 |
[C/C++] STL sort() (0) | 2022.09.27 |
[c/c++] 백준 1978_소수 찾기 (1) | 2022.09.20 |