본문 바로가기
프로그래밍/Algorithm

C# [백준 BAEKJOON] 10757번 큰 수 A+B

by bantomak 2024. 3. 4.
반응형

문제

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 A와 B가 주어진다. (0 < A,B < 1010000)

 

출력

첫째 줄에 A+B를 출력한다.

 

 

10757번: 큰 수 A+B

두 정수 A와 B를 입력받은 다음, A+B를 출력하는 프로그램을 작성하시오.

www.acmicpc.net

 

풀이 코드

char에 '0'을 빼는 코드가 처음에는 이해하기 힘들었지만 여기저기 찾아보니 아스키코드 관련으로 변환하기 위한 코드였다. 관련된 내용은 아래의 글을 참고하자.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        var input = Console.ReadLine().Split();

        BigNumerAdd(input[0], input[1]);
    }

    static void BigNumerAdd(string num1, string num2)
    {
        Queue<int> queue = new Queue<int>();
        StringBuilder sb = new StringBuilder();
        var s = "";

        if (num1.Length <= num2.Length)
        {
            for (int i = 0; i < num2.Length - num1.Length; i++)
            {
                s += "0";
            }

            num1 = s + num1;
        }
        else
        {
            for (int i = 0; i < num1.Length - num2.Length; i++)
            {
                s += "0";
            }

            num2 = s + num2;
        }

        for (int i = num1.Length - 1; 0 <= i; i--)
        {
            var digit1 = num2[i] - '0';
            var digit2 = num1[i] - '0';
            var prevCarry = 0;

            if (queue.Count > 0)
            {
                prevCarry = queue.Dequeue();
            }

            if (10 <= digit1 + digit2 + prevCarry)
            {
                queue.Enqueue(1);
            }

            sb.Append((digit1 + digit2 + prevCarry) % 10);
        }

        if (queue.Count > 0)
        {
            sb.Append(queue.Dequeue());
        }

        var result = new string(sb.ToString().Reverse().ToArray());
        Console.WriteLine(result);
    }
}

댓글