阶乘计算虽然可以通过循环、递归或者使用静态变量等方法实现,但是这些方法仅限于结果较小的情况。100的阶乘有158位,显然在使用C++时很难保证直接计算时不会产生溢出。
这里可以采用数组的方式存储计算结果的每一位,然后按位计算阶乘的大小,最后将结果以字符串的方式输出。
void Func(int n, char *pOut)
{
if(pOut == NULL)
return;
int chrs[256];
int idx(1);
chrs[0] = 1;
for(int i = 1; i <= n; i++)
{
int cry = 0;
for(int j = 0; j < idx; j++)
{
chrs[j] = chrs[j] * i + cry;
cry = chrs[j] / 10;
chrs[j] %= 10;
}
while(cry > 10)
{
chrs[idx++] = cry % 10;
cry /= 10;
}
if(cry > 0)
chrs[idx++] = cry;
}
for(int i = idx - 1; i >= 0; i--)
{
*pOut++ = chrs[i] + '0';
}
*pOut = '\0';
return;
}