반응형
문제
두 정수 A와 B가 주어졌을 때, 두 수의 곱을 출력하는 프로그램을 작성하시오.
입력
첫째 줄에 정수 A와 B가 주어진다. 두 정수는 0보다 크거나 같은 정수이며, 0을 제외한 정수는 0으로 시작하지 않으며, 수의 앞에 불필요한 0이 있는 경우도 없다. 또한, 수의 길이는 300,000자리를 넘지 않는다.
출력
두 수의 곱을 출력한다.
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);
}
}
'프로그래밍 > Algorithm' 카테고리의 다른 글
C# [백준 BAEKJOON] 15650번 N과 M (2) (0) | 2024.03.18 |
---|---|
C# [백준 BAEKJOON] 2824번 최대공약수 (0) | 2024.03.15 |
C# [백준 BAEKJOON] 2960번 에라토스테네스의 체 (0) | 2024.03.11 |
C# [백준 BAEKJOON] 9020번 골드바흐의 추측 (0) | 2024.03.11 |
C# [백준 BAEKJOON] 10992번 별 찍기 - 17 (0) | 2024.03.08 |
댓글