//用数组存储大叔阶乘值
#include<stdlib.h>
#include<iostream>
#include<algorithm>
#include <iomanip>
using namespace std;
class HugeInt{
private:
char m_sum[10000];
public:
HugeInt() { memset(m_sum, '0', sizeof(m_sum));};
HugeInt(int value)
{
memset(m_sum, '0', sizeof(m_sum));
intarr_idx = 0;
while (value)
{
m_sum[arr_idx] = value %10 + 48;
value /=10;
arr_idx++;
}
}
void arr_add(char *sum, int dim, int isrc)
{
intvalue = 0;
if (dim< 1)
{
return;
}
for (int i =0; i < dim;i++)
{
value = sum[i]- 48 + isrc;
sum[i]= value % 10 + 48;
if(value < 10)
{
break;
}
isrc =1;
}
}
HugeInt & operator*(int a)
{
int tmp= a;
int e =0;
chartmp_sum[10000] = { '0'};
memset(tmp_sum, '0',10000);
while(tmp)
{
int v =tmp % 10;
for (int i =0; i < sizeof(m_sum); i++)
{
intvalue = (m_sum[i] - 48)*v;
arr_add(tmp_sum + e + i, 10000 -e - i, (value % 10));
arr_add(tmp_sum + e + 1 + i,10000 - e - 1 - i, (value / 10));
}
tmp = tmp / 10;
++e;
}
memcpy(m_sum, tmp_sum, 10000);
return *this;
}
friend ostream & operator<< (ostream&out, const HugeInt &a)
{
for (int i =0; i < sizeof(a.m_sum); i++)
{
out << a.m_sum[i];
}
returnout;
}
};