C语言高精度求阶乘,书中例子看不懂,acm菜鸟求救!!!!

2025-01-24 06:35:13
推荐回答(1个)
回答1:

#include
#include
const int maxn=3000;
int f[maxn]; //用int 数组来存储 每一位的数值  如 123 则存储 为 {3,2,1,0...0}  存储方式是倒序的 根据代码看出来的
int main()
{
    int i,j,n;  //i,j为普通迭代变量 n 为求解的 n! 中的 n
    scanf("%d",&n);   
memset(f,0,sizeof(f));   
    f[0]=1;         //因为以后要用乘法 这里的个位 
    for(i=2;i<=n;i++)  // 重 n!中的 2 开始乘 直到n
    {
        int c=0;    //进位为0 
        //下面是一个大数乘法
        for(j=0;j        {
            int s=f[j]*i+c;  // 每一位都乘 i
            f[j]=s%10;          //每一位都只留下 个位数
            c=s/10;         //记下 进位的值 算到下一位的时候 加上
        }
    }
    //下面是输出大数
    for(j=maxn-1;j>=0;j--)
    if(f[j]) break;             //重最后都是0部分 用j记下第一个不是0 位数 集 最高位
    for(i=j;i>=0;i--)
    printf("%d",f[i]);      //重最高位 j 开始到 0 输出 每位数 

    return 0;
    // 结束
    //ps:  这道题只要明白 大数的乘法 就行了 其他部分都很简单的 
}