c语言求1到100阶乘代码

c语言求1到100阶乘代码,第1张

1到100?这数够大的了...

#include<stdio.h>

void main()

{

double j=1

for(int i=1i<=50i++)j*=i

printf("1到100的阶乘是%.0f\n",j)

}

下面用函数的递归调用做:

#include<stdio.h>

double fact(int n)/*求阶乘的函数*/

{

double j

if(n>1)j=n*fact(n-1)/*递归调用,当n>1时,一直会调用下去,只不过每次参数被减1*/

else

return 1/*当n被减到1时,返回1,如是会被累积,当n初始为1时直接返回1*/

return j/*j是当n>1时,最后要的结果*/

}

void main()

{

printf("1到n的阶乘是%.0f\n",fact(5))

}

举例说明算法:

1!+2!+3!+……+n!

=1+2*(1+3*(1+4*(1+5(1+.(1+(n-1)*(1+n)).))))

不过当n=100貌似会溢出.因此要实现一个大数乘法的函数。

#include<stdio.h>

void

main()

{

long

sum

int

n=100

sum=n

while(n!=1)

{

sum+=1

sum*=n-1//使用大数乘法函数替代这里的处理

n--

}

printf("%d\n",sum)

}

刚答过一个大数阶乘的,精确算到10000!没问题

#include <stdio.h>

#define N 10000

int main()

{

    static long int r[N] = { 1 }

    int i, j,n

    int k = 0, l = 0

    printf("输入一个数求其阶乘\n")

    scanf("%d", &n)

    for (i = 1 i <= n i++)

    {

        for (j = 0 j <= l j++)

        {

            r[j] = r[j] * i + k

            k = r[j] / 10000

            r[j] = r[j] % 10000

        }

        if (k)

        {

            l++

            r[j] = k

            k = 0

        }      

    }  

    j = l

    printf("%d!=%d", i-1, r[j--])

    for ( j >= 0 j--)

    {

        printf("%04d", r[j])

    }

    printf("\n")

    return 0

}


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12207812.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-21
下一篇 2023-05-21

发表评论

登录后才能评论

评论列表(0条)

保存