做了两个钟,汗…… #include <iostream> #include <memory.h> using namespace std; #define DEF_MAX_LEN 1000 class CBigNum { public: //CBigNum(); CBigNum(unsigned long shortNum); CBigNum(const CBigNum &r_bigNum); ~CBigNum(); bool Add(const CBigNum &r_bigNum); bool Mul(const CBigNum &r_bigNum); void Print(void)const; bool LeftMove(int several); private: int m_maxLen; int m_realLen; unsigned char *pBuf; }; int main() { CBigNum sum(1); for (int i=1; i<=100; ++i) { sum.Mul(i); } sum.Print(); return 0; } /* CBigNum::CBigNum() { m_maxLen = DEF_MAX_LEN; m_realLen = 0; pBuf = new unsigned char [m_maxLen]; memset(pBuf, 0, m_maxLen); } */ CBigNum::CBigNum(unsigned long shortNum) { m_maxLen = DEF_MAX_LEN; m_realLen = 0; pBuf = new unsigned char [m_maxLen]; memset(pBuf, 0, m_maxLen); while (shortNum) { pBuf[m_realLen++] = shortNum%10; shortNum /= 10; } } CBigNum::CBigNum(const CBigNum &r_bigNum) { m_maxLen = DEF_MAX_LEN; pBuf = new unsigned char [m_maxLen]; memset(pBuf, 0, m_maxLen); m_realLen = r_bigNum.m_realLen; for (int i=0; i<m_realLen; ++i) { pBuf[i] = r_bigNum.pBuf[i]; } } CBigNum::~CBigNum() { if (pBuf) { delete [] pBuf; pBuf = NULL; } } bool CBigNum::Add(const CBigNum &r_bigNum) { int bigLen = (m_realLen > r_bigNum.m_realLen) ? m_realLen : r_bigNum.m_realLen; int carry = 0; int sum = 0; if (bigLen > m_maxLen) return false; for (int i=0; i<bigLen; ++i) { sum = pBuf[i] + r_bigNum.pBuf[i] + carry; carry = sum / 10; pBuf[i] = sum % 10; } if (0 != carry) { pBuf[bigLen] = carry; m_realLen = bigLen+1; } else { m_realLen = bigLen; } return true; } bool CBigNum::Mul(const CBigNum &r_bigNum) { CBigNum sum(0); for (int i=0; i<r_bigNum.m_realLen; ++i) { if (0 == r_bigNum.pBuf[i]) { continue; } CBigNum temp(*this); temp.LeftMove(i); for (int j=0; j<r_bigNum.pBuf[i]; ++j) { sum.Add(temp); } } m_realLen = sum.m_realLen; for (i=0; i<m_realLen; ++i) { pBuf[i] = sum.pBuf[i]; } return true; } void CBigNum::Print(void)const { for (int i=m_realLen-1; i>=0;--i) { cout << (int)pBuf[i]; } cout << endl; } bool CBigNum::LeftMove(int several) { if (0 >= several) return false; for (int i=m_realLen-1; i>=0; --i) { pBuf[i+several] = pBuf[i]; } for (int j=0; j<several; ++j) { pBuf[j] = 0; } m_realLen += several; return true; }