• 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];
	
}