1. 程式人生 > >100以內的階乘計算方法

100以內的階乘計算方法

階乘計算雖然可以通過迴圈、遞迴或者使用靜態變數等方法實現,但是這些方法僅限於結果較小的情況。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;
}