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

C# [백준 BAEKJOON] 13277번 큰 수 곱셈

by bantomak 2024. 3. 14.

문제

두 정수 A와 B가 주어졌을 때, 두 수의 곱을 출력하는 프로그램을 작성하시오.

 

입력

첫째 줄에 정수 A와 B가 주어진다. 두 정수는 0보다 크거나 같은 정수이며, 0을 제외한 정수는 0으로 시작하지 않으며, 수의 앞에 불필요한 0이 있는 경우도 없다. 또한, 수의 길이는 300,000자리를 넘지 않는다.

 

출력

두 수의 곱을 출력한다.

 

 

13277번: 큰 수 곱셈

첫째 줄에 정수 A와 B가 주어진다. 두 정수는 0보다 크거나 같은 정수이며, 0을 제외한 정수는 0으로 시작하지 않으며, 수의 앞에 불필요한 0이 있는 경우도 없다. 또한, 수의 길이는 300,000자리를

www.acmicpc.net

 

 

1차 풀이 코드(메모리 초과 실패)

using System;
using System.Linq;
using System.Text;

class Program
{
    static void Main(string[] args)
    {
        var input = Console.ReadLine().Split();
        Console.WriteLine(stringMulti(input[0], input[1]));
    }

    static string stringMulti(string n, string m)
    {
        var total = "";
        var digit = "";

        for (int i = m.Length - 1; 0 <= i; i--)
        {
            var result = "";
            for (int j = 0; j < m[i] - '0'; j++)
            {
                result = stringAdd(result, n);
            }

            if (result == "")
            {
                result = n;
            }

            result += digit;
            digit += '0';

            total = stringAdd(total, result);
        }

        return total;
    }

    static string stringAdd(string n, string m)
    {
        var sb = new StringBuilder();
        var carry = 0;

        if (n.Length < m.Length)
        {
            var lenghDiff = m.Length - n.Length;
            for (int i = 0; i < lenghDiff; i++)
            {
                n = '0' + n;
            }
        }

        if (n.Length > m.Length)
        {
            var lenghDiff = n.Length - m.Length;
            for (int i = 0; i < lenghDiff; i++)
            {
                m = '0' + m;
            }
        }

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

            sb.Append((num1 + num2 + carry) % 10);

            if (num1 + num2 + carry > 9)
            {
                carry = 1;
            }
            else
            {
                carry = 0;
            }
        }

        var newResult = new string(sb.ToString().Reverse().ToArray());

        if (carry == 1)
        {
            newResult = carry + newResult;
        }

        return newResult;
    }
}

 

2차 풀이 코드

using System;
using System.Numerics;

class Program
{
    static void Main(string[] args)
    {
        var input = Console.ReadLine().Split();
        var num1 = BigInteger.Parse(input[0]);
        var num2 = BigInteger.Parse(input[1]);

        Console.WriteLine(num1 * num2);
    }
}

댓글