문제 링크입니다: https://www.acmicpc.net/problem/10827
kks227님의 깃헙을 참고해서 푼 문제입니다.
kks227님이 C++에서 bigInteger 연산 구현을 정말 잘 정리하셨기 때문에 그대로 사용했습니다.
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
//kks227님 출처
//bigInteger 덧셈 구현
string Add(string &s1, string &s2)
{
string result(max(s1.size(), s2.size()), '0');
bool carry = false;
for (int i = 0; i < result.size(); i++)
{
int temp = carry;
carry = false;
if (i < s1.size())
temp += s1[s1.size() - i - 1] - '0';
if (i < s2.size())
temp += s2[s2.size() - i - 1] - '0';
if (temp >= 10)
{
carry = true;
temp -= 10;
}
result[result.size() - i - 1] = temp + '0';
}
if (carry)
result.insert(result.begin(), '1');
return result;
}
//bigInteger 곱셈 구현
string Multiply(string &s1, string &s2)
{
string result = "0";
for (int i = 0; i < s2.size(); i++)
{
string line(s1);
int carry = 0;
for (int j = s1.size() - 1; j >= 0; j--)
{
int temp = carry;
carry = 0;
temp += (s1[j] - '0')*(s2[s2.size() - i - 1] - '0');
if (temp >= 10)
{
carry = temp / 10;
temp %= 10;
}
line[j] = temp + '0';
}
if (carry > 0)
line.insert(line.begin(), carry + '0');
line += string(i, '0');
result = Add(result, line);
}
return result;
}
//bigInteger 지수승 구현
string power(string &s1, int p)
{
if (p == 1)
return s1;
string result = power(s1, p - 1);
result = Multiply(result, s1);
return result;
}
int main(void)
{
ios_base::sync_with_stdio(0);
cin.tie(0);
string A;
int B;
cin >> A >> B;
//소수점 위치를 찾고
string::iterator finder = find(A.begin(), A.end(), '.');
int idx = 0;
//소수점을 지워준다
if (finder != A.end())
{
idx = A.end() - finder - 1;
A.erase(finder);
}
//소수점이 추가될 위치를 저장하고
idx *= B;
string result = power(A, B);
//소수점이 존재한다면 소수점을 추가해준다
if (idx > 0)
result.insert(result.end() - idx, '.');
cout << result << "\n";
return 0;
}
개발환경:Visual Studio 2017
지적, 조언, 질문 환영입니다! 댓글 남겨주세요~
[참고]https://github.com/kks227/BOJ/blob/master/10800/10827.cpp
'알고리즘 > BOJ' 카테고리의 다른 글
백준 15684번 사다리 조작 (4) | 2019.01.18 |
---|---|
백준 1213번 팰린드롬 만들기 (0) | 2019.01.18 |
백준 1780번 종이의 개수 (0) | 2019.01.18 |
백준 11729번 하노이 탑 이동 순서 (0) | 2019.01.18 |
백준 16528번 Highway Decommission (0) | 2019.01.18 |