阶乘计算虽然可以通过循环、递归或者使用静态变量等方法实现,但是这些方法仅限于结果较小的情况。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 = ' ';return;}