全站数据
8 4 2 0 5 8 1

c语言链表如何求50阶乘和

考研小博士 | 简单学习,快乐成才!         
问题更新日期:2024-10-13 22:43:24

问题描述

c语言链表如何求50阶乘和,在线求解答
精选答案
最佳答案

50的阶乘 已经很大了

要求近似值 可以用double累乘 很简单

要求精确值 就只能用大数模拟了

一下是大数算法:

#include     

int main()    

{    

    int n;    

    int a[9000]; //确保保存最终运算结果的数组足够大    

     int digit = 1; //位数    

     int temp;   //阶乘的任一元素与临时结果的某位的乘积结果    

     int i, j, carry; //carry:进位    

     n=50;//求50!

    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 = carry / 10; //看还能不能进位    

         }    

    }    

    printf("n ! = ");    //显示结果    

    for(j = digit; j >=1;j--)    

    {    

        printf("%d",a[j-1]);    

    }    

    printf("

");    

    return 0;    

}

其他回答

要求解50的阶乘,可以使用链表来存储大数。首先创建一个链表,每个节点存储一个数字。然后从2开始遍历到50,将每个数字乘以链表中的每个节点,并将结果存储在新的链表中。

最后遍历新链表,将每个节点的值相加,得到50的阶乘的和。这种方法可以处理大数,避免溢出。