본문 바로가기
Problem Solving/SWEA

[SWEA] 3260. 두 수의 덧셈

by 테리는당근을좋아해 2020. 2. 23.

문제

1 ~ 10^100의 두 수 A, B가 입력될 때 두 수의 합을 구하는 문제

 

풀이방법

최대 100자리 까지 입력으로 들어오기 때문에 int나 long으로 계산할 수 없다.

 

따라서 배열로 각 자리 수를 입력받고 한 자리씩 계산해준다.

 

이 때, 각 자리수를 계산할 때 발생하는 올림수를 처리해 준다.

 

소스코드

package samsung;

import java.util.*;

public class s_3260 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int test = sc.nextInt();
		
		for(int t = 1; t <= test; t++) {
			String a = sc.next();
			String b = sc.next();
			int l = (a.length() > b.length()) ? a.length() : b.length();
			int[] c = new int[l + 1];
			int[] d = new int[l + 1];
			int[] e = new int[l + 1];
			for(int i = 0; i <= l; i++) {
				if(i >= a.length()) {
					c[l - i] = 0;
				}
				else {
					c[l - i] = a.charAt(a.length() - i - 1) - '0';
				}
			}
			for(int i = 0; i <= l; i++) {
				if(i >= b.length()) {
					d[l - i] = 0;
				}
				else {
					d[l - i] = b.charAt(b.length() - i - 1) - '0';
				}
			}
			int carry = 0;
			int sum = 0;
			for(int i = 0; i <= l; i++) {
				sum = carry + c[l - i] + d[l - i];
				if(sum > 9){
					sum -= 10;
					carry = 1;
				}
				else {
					carry = 0;
				}
				e[l - i] = sum;
			}
			if(carry == 1)
				e[0] = 1;
			
			System.out.print("#" + t + " ");
			
			if(e[0] == 1) {
				for(int i = 0; i <= l; i++) {
					System.out.print(e[i]);
				}
			}
			else {
				for(int i = 1; i <= l; i++) {
					System.out.print(e[i]);
				}
			}
			System.out.println();
		}
	}
}

 

댓글