#include <iostream>
#include <vector>
#include <new>
using namespace std;
struct BigInt
{
BigInt() { }
BigInt(int n) : m_digit(n,0){ }
BigInt(vector<int>& data) : m_digit(data){ }
vector<int> m_digit;
const BigInt operator +(const BigInt& rhs) const
{
unsigned int rSize = rhs.m_digit.size();
unsigned int lSize = m_digit.size();
unsigned int maxSize = max(rSize, lSize);
BigInt Temp(maxSize + 1);
if(rSize > lSize)
{
for(unsigned int i = 0; i < lSize; i++)
{
Temp.m_digit[i] = m_digit[i] + rhs.m_digit[i];
if(Temp.m_digit[i] > 10)
{
Temp.m_digit[i] -= 10;
Temp.m_digit[i+1]++;
}
}
for(unsigned int i = lSize; i < rSize; i++)
{
Temp.m_digit[i] = rhs.m_digit[i];
Temp.m_digit[i] = m_digit[i] + rhs.m_digit[i];
if(Temp.m_digit[i] > 10)
{
Temp.m_digit[i] -= 10;
Temp.m_digit[i+1]++;
}
}
}
else
{
for(unsigned int i = 0; i < rSize; i++)
{
Temp.m_digit[i] = m_digit[i] + rhs.m_digit[i];
}
for(unsigned int i = rSize; i < lSize; i++)
{
Temp.m_digit[i] = m_digit[i];
}
}
return Temp;
}
const BigInt operator *(const BigInt& rhs) const
{
unsigned int fSize = m_digit.size() - 1;
unsigned int gSize = rhs.m_digit.size() - 1;
unsigned int hsize = fSize * gSize + 1;
BigInt H(hsize);
for(unsigned int i = 0 ; i < hsize ; i++)
{
if(i <= gSize)
{
// 여기 int 맞다. unsigned int 아니다.
for(int f = 0, g = i; (f <= fSize) && (g >= 0); f++, g--)
{
H.m_digit[i] += m_digit[f] * rhs.m_digit[g];
}
}
else
{
// 여기 int 맞다. unsigned int 아니다.
for(int f = i - gSize, g = gSize; (f <= fSize) && (g >= 0); f++, g--)
{
H.m_digit[i] += m_digit[f] * rhs.m_digit[g];
}
}
}
// 여기에다가 캐리 처리하는 코드 넣어야 한다.
// 이대로 끝내면 그냥 보통의 다항식을 곱하는게 되니까 캐리 처리는 알아서 해라.
return H;
}
void print() const
{
printf("값 :\\n");
for(unsigned int i = 0 ; i < m_digit.size() ; i++)
{
printf("%d", m_digit[i]);
}
printf("\\n");
}
};
int main(int argc, char* argv[])
{
vector<int> testInt1(200, 0);
vector<int> testInt2(200, 0);
for(int i = 0 ; i < 200 ; i++)
{
testInt1[i] = i % 10; // 여기에 넣는 값은 니가 필요한 값 알아서 넣으면 됨
testInt2[i] = (i * i) % 10;
}
BigInt bigInt1(testInt1);
BigInt bigInt2(testInt2);
BigInt bigInt3;
bigInt3 = bigInt1 + bigInt2;
bigInt3.print();
bigInt3 = bigInt1 * bigInt2;
//bigInt3.print();
}
곱셈에서 캐리처리하는건 이거보다 조금 복잡할거같다.
아까는 printf하는 부분에서 삽질함.
댓글 영역
획득법
① NFT 발행
작성한 게시물을 NFT로 발행하면 일주일 동안 사용할 수 있습니다. (최초 1회)
② NFT 구매
다른 이용자의 NFT를 구매하면 한 달 동안 사용할 수 있습니다. (구매 시마다 갱신)
사용법
디시콘에서지갑연결시 바로 사용 가능합니다.