https://www.acmicpc.net/problem/10757
string 관련 참조하면 좋은 글
https://aigong.tistory.com/259
숫자가 범주를 넘어서는 경우 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 |
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;
}
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;
}
파이썬은 10,000자리 정도의 자연수도 자유롭게 다룰 수 있습니다
고로 Python pass