1.题目如下:
2. 思路:题目已给出了高精度算法的步骤
3. 代码:
#include<stdio.h>
int a[10000*5]; //保存最终运算结果的数组
int main()
{
int n; //需要求阶乘的数字
int carry; //进位
int digit; //位数
int temp, i, j; //temp为阶乘的任一元素与临时结果的某位的乘积结果
while (scanf("%d", &n) != EOF)
{
digit = 1;
a[0] = 1; //将结果先初始化为1
for (i = 2; i <= n; ++i) //开始阶乘,阶乘元素从2开始
{
//按乘法运算思想来考虑,将临时结果的每位与阶乘元素相乘
for (j = 1, carry = 0; j <= digit; ++j)
{
temp = a[j - 1] * i + carry; //相应阶乘中的一项与当前所得临时结果的某位相乘(进位)
a[j - 1] = temp % 10; //更新临时结果的位上信息
carry = temp / 10; //看是否有进位
}
while (carry) //如果有进位
{
a[++digit - 1] = carry % 10; //新加一位,添加信息。位数增1
carry /= 10; //看还能不能进位
}
}
for (i = digit; i >= 1; --i)
{
printf("%d", a[i - 1]);
}
printf("\n");
}
}