首页 > 编程知识 正文

C语言一个数的阶乘,c语言实现大数乘法

时间:2023-05-06 12:57:55 阅读:226760 作者:2092

            一个正整数的阶乘(factorial)是所有小于及等于该数的正整数的积,并且0的阶乘为1。自然数n的阶乘写作n!。这是在1808年,秀丽的大炮引进这个表示。即n!=1×2×3×...×n。阶乘亦可以递归方式定义:0!=1,n!=(n-1)!×n。

            对于一般的小数求阶乘,我们一般有两种方法:一是使用循环求解,二是利用递归的方法进行求解,第二种方法可能要求要更高一点。下面我们通过一个小例子来看看。

            问题:输入一个小数字,输出其对应的阶乘。

            一:循环:

#include<stdio.h>int main(){ int firstnumber; int result = 1;//此处可以用long或者long long不过对应的输出也要改 scanf("%d", &firstnumber); for (int i = 1; i <= firstnumber; i++) { result *= i; } printf("%dn", result); return 0;}

二:递归:

#include<stdio.h>int factorial(int n){ if (n == 0 || n == 1)//递归终止条件 { return 1; } else { return n * factorial(n - 1); }}int main(){ int firstnumber; scanf("%d", &firstnumber); printf("%dn", factorial(firstnumber)); return 0;}

             但这两种方法都只能对小数求阶乘有用,我刚刚开始写那个对大数求阶乘的时候就想着,大数,大不了我输出的时候给你用个%ld呗,再不行的话就改为%lld咯,想的到挺美好,不过终究还是抵不过现实呀!我尝试了很多遍,发现用lld的输出格式也最多只能计算出168(不一定完全正确)以下的数的阶乘。而在C语言中如果想要输出一个很大的数字,也就是说要输出很多数字字符,这样的话我们不难想到要用数组来进行存储和输出,在这个过程中,我们只要保证数组的长度足够长就能表示出来。

          其基本思想:我们可以将一个数组看成一个数字,然后我们将乘数和被乘数的低位到高位依次相乘,加上每位计算的进位数,依次得到每一位的结果。

          无论乘数有多少位,都将乘数看成一个整体,与低位相乘加上该位的进位数得到一个临时的数字,这个临时的数字的最后一个数就是我们需要的一位(%10),然后除去最低位后的数作为下一位的余数,当被乘数每一位乘完之后,如果余数不为0,就将其依次放入我们需要的结果当中。

   可能看的不太懂哈,毕竟我也不是很懂,哈哈哈哈哈。​​​​​​接下来就看看代码

   问题:编写程序,输入整数 n(0 ≤ n ≤ 10000),计算 n!(有多组数据,每组一个 n)

#include<stdio.h>int main(){ int a[1000], m,i, j, c, t; long n; while (scanf("%d", &n) != EOF) { a[0] = 1; m = 1; for (i = 2; i <= n; i++) { for (c = 0, j = 0; j < m; j++) { t = a[j] * i + c; a[j] = t % 10; c = t / 10; } while (c) { a[m++] = c % 10; c /= 10; } } for (j = m - 1; j >= 0; j--) printf("%d", a[j]); printf("n"); } return 0; }

希望对您有帮住,各位观众老爷们。
 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。