n!(n<=1000)

int fact(int n)
{
        int arr[3096] = { 1 };      // 记录答案数字
        int size = 1;               // 记录答案位数
        int carry = 0;              // 表示进位数字
        for (int i = 1; i <= n; i++)
        {
            for (int j = 0; j < size; j++) 
            {
                int temp = arr[j] * i + carry;   // 用乘数 i,算出本位乘积 假设为 24 x 5 = 120
                arr[j] = temp % 10;              // 则本位写 0,储存在 arr[0] 中
                carry = temp / 10;               // 进位写 12,储存在变量 carry 中
            }
            while (carry)
            {                
                arr[size++] = carry % 10;       // 本位写 2,储存在 arr[1] 中
                carry /= 10;                    // 进位写 1
            }
        }
        for (int i = size - 1; i >= 0; i--)    // arr[] 中储存的数字从前到后分别为个、十、百...数组逆序输出
            printf("%d", arr[i]);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容