几种算法-----n的阶乘

几种算法-----n的阶乘问题描述 输入一个正整数 n 输出 n 的值 其中 n 1 2 3 n 算法 1 递归 long long Factorial long long n if n 0 return 1 return Factorial n 1 n void

大家好,我是讯享网,很高兴认识大家。

问题描述:

算法 1 —–递归

long long Factorial(long long n) { if(n==0) return 1; return Factorial(n-1)*n; } void Test1() { printf("%lld\n",Factorial(1)); printf("%lld\n",Factorial(10)); printf("%lld\n",Factorial(100)); printf("%lld\n",Factorial(1000)); printf("%lld\n",Factorial(10000)); } 

讯享网

算法2——循环

讯享网long long Factorial1(long long n) { long long i=1,sum=1; while(i<=n) { sum*=i; ++i; } return sum; } void Test2() { printf("%lld\n",Factorial(1)); printf("%lld\n",Factorial(10)); printf("%lld\n",Factorial(100)); printf("%lld\n",Factorial(1000)); } 

算法3——高精度算法

#define MAX 1000 void Mul(int n) { int i=0,j=0; int s;//乘积 int c=0;//进位 //存放大整数a int arr[MAX]={0}; arr[0]=1; for(i=2;i<=n;i++) { for(j=0;j<MAX;j++) { s=arr[j]*i+c; arr[j]=s%10; c=s/10;//进位 } } for(i=MAX-1;i>=0;i--) { //遇到不是0,开始输出 if(arr[i]) break; } for(j=i;j>=0;j--) { //倒序输出 printf("%d",arr[j]); } printf("\n"); } void Test() { Mul(1); Mul(10); Mul(100); }

算法3思路:

n!可能很大,算法1和算法2都存在溢出现象,故采用高精度算法:使用一个数组arr来表示一个大整数A,arr[0]表示A的个位,arr[1]表示A的十位,依次类推。
A乘以某一数K转化成A的每一位都乘以k,并且处理相应的位数
由于n的阶乘为1*2*3*………..*n,故数组的第一项应初始化为1,其余初始化为0(如图)

这里写图片描述
讯享网

结果:

算法一:

这里写图片描述

算法二:

这里写图片描述

算法三:

这里写图片描述

小讯
上一篇 2025-02-19 13:04
下一篇 2025-01-27 18:50

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/127870.html