- toc {:toc}
문제
두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)
출력
첫째 줄에 A+B를 출력한다.
예제 입력 1
9223372036854775807 9223372036854775808
예제 출력 1
18446744073709551615
출처:https://www.acmicpc.net/problem/10757
풀이
string 형태로 받아 int로 형변환 →아스키코드 이용
int형으로 덧셈 후 출력, 덧셈 시 올림에 주의하여 코딩.
※ string, vector 공부 다시해야 할 듯. +형변환에 관해 추가 공부 필요
#include <iostream>
#include <string>
#include <vector>
using namespace std;
//48
void bigNum(string A, string B);
int main()
{
string A, B;
cin >> A >> B;
bigNum(A, B);
return 0;
}
void bigNum(string A, string B)
{
int lenA = A.length();
int lenB = B.length();
int len, sum;
int iA[10001], iB[10001];
vector<int> res;
bool roundUp = false;
// 자릿수가 많은 것을 A로
if(lenA < lenB)
{
swap(A, B);
lenA = A.length();
lenB = B.length();
}
len = lenA; // 최대 길이
for(int i = 0; i<lenA; i++)
iA[i+1] = A.at(i)-'0';
for(int i = 0; i<lenB; i++)
iB[i+1+(lenA-lenB)] = B.at(i)-'0';
for(int i = len; i>0; i--)
{
sum = iA[i]+iB[i];
if(roundUp)
sum+=1;
roundUp=false;
if(sum > 9)
{
roundUp=true;
res.push_back(sum % 10);
}
else
{
res.push_back(sum);
}
}
if(roundUp)
cout << 1;
for(int i=res.size()-1; i>=0; i--)
cout << res[i];
}