64,685
社区成员
发帖
与我相关
我的任务
分享
#pragma once
#include <iostream>
using namespace std;
class BigNum1
{
public:
BigNum1(void);
~BigNum1();
BigNum1(int *, int);
BigNum1(BigNum1&);
BigNum1& operator=(BigNum1 BigOne);
BigNum1& operator*(BigNum1 &bigOne);
BigNum1& operator+(BigNum1 &bigOne);
friend ostream& operator<<(ostream &os, BigNum1 &BigOne);
private:
long nlen;
int *pData;
};
BigNum1::BigNum1(void)
{
nlen = 0;
pData = NULL;
}
BigNum1::~BigNum1(void)
{
if (nlen != 0)
{
nlen = 0;
delete[] pData;
pData = NULL;
}
}
BigNum1::BigNum1(int *data, int len)
{
nlen = len;
pData = new int[nlen];
memcpy(pData, data, 4 * len);
}
BigNum1::BigNum1(BigNum1& BigOne)
{
if (this == &BigOne )
{
return;
}
nlen = BigOne.nlen;
if (pData)
{
delete[] pData;
pData = NULL;
}
pData = new int[nlen];
memcpy(pData, BigOne.pData, nlen * 4);
}
BigNum1& BigNum1::operator=(BigNum1 bigOne)
{
if (this == &bigOne)
{
return *this;
}
if (pData)
{
delete [] pData;
pData = NULL;
}
nlen = bigOne.nlen;
pData = new int[nlen];
for (int i = 0; i < nlen; i++)
{
pData[i] = bigOne.pData[i];
}
return (*this);
}
BigNum1& BigNum1::operator+(BigNum1 &bigOne)
{
long Maxlen = nlen > bigOne.nlen?nlen + 1: bigOne.nlen + 1;
BigNum1 bigSum;
bigSum.nlen = Maxlen;
bigSum.pData = new int[Maxlen];
memset(bigSum.pData, 0, 4 * Maxlen);
int k = 0;
for (int i = 0 ; i < Maxlen; i++)
{
int a, b;
a = 0;
b = 0;
if (i < nlen)
{
a = pData[i];
}
if (i < bigOne.nlen)
{
b = bigOne.pData[i];
}
int sum = a+ b + k;
k = sum / 10;
bigSum.pData[i] = sum %10;
}
return bigSum;
}
BigNum1& BigNum1::operator*(BigNum1& bigOne)
{
BigNum1 IData;
long maxLen = nlen + bigOne.nlen;
IData.nlen = maxLen;
IData.pData = new int[maxLen];
memset(IData.pData, 0, IData.nlen * 4);
for (int i = 0; i < nlen; i++)
{
BigNum1 Jdata;
Jdata.nlen = maxLen;
Jdata.pData = new int[maxLen];
memset(Jdata.pData, 0, Jdata.nlen * 4);
int a = 0;
int b = 0;
for (int j = 0; j < bigOne.nlen; j++)
{
int sum = pData[i] * bigOne.pData[j];
sum += a;
a = sum/ 10;
b = sum % 10;
Jdata.pData[i+j] = b;
}
/* if (a != 0)
{
Jdata.pData[i + bigOne.nlen] = a;
}*/
IData = IData + Jdata;
}
cout<<IData;
return IData;
}
ostream& operator<<(ostream& os, BigNum1 &bigOne)
{
for ( int i = bigOne.nlen - 1; i >= 0; i--)
{
os<<bigOne.pData[i];
}
return os;
}
#include "stdafx.h"
#include "BigNum1.h"
int _tmain(int argc, _TCHAR* argv[])
{
int np[] = {1,1};
int nq[] = {2,1};
//BigNum1 one(np, 2);
BigNum1 two(nq, 2);
two = two * two;
cout<<two<<endl;
return 0;
}
多谢了。