c语言.求1!+2!+3!+……+10!.要求编写求N的阶乘的函数

来源:学生作业帮助网 编辑:作业帮 时间:2024/04/26 00:24:29
c语言.求1!+2!+3!+……+10!.要求编写求N的阶乘的函数

c语言.求1!+2!+3!+……+10!.要求编写求N的阶乘的函数
c语言.求1!+2!+3!+……+10!.要求编写求N的阶乘的函数

c语言.求1!+2!+3!+……+10!.要求编写求N的阶乘的函数
#include<stdlib.h\x0d#include<iostream\x0d#include<iomanip\x0dusing namespace std;\x0dconst int N=1000;\x0dint compute(unsigned int *s,int n)//s用来存储一次的计算结果,n为本次计算的乘数,函数返回结果中有效数据的节数{unsigned long p; //暂时存放一节的结果\x0dunsigned long more=0;//一次乘法的进位\x0dint i; //循环变量\x0dstatic int m=1;//存放结果中的节数,三位一节\x0dstatic int q=0;//存放结果中最后为零的节数\x0d//计算本次的结果\x0dfor(i=q;i<m;i++){p=(long)s[i]*(long)n+more;more=p/N;s[i]=p-more*N;}//计算结果中最后为零的节数\x0dwhile(s[q]==0) q++;\x0d//处理最高位\x0dfor(more=p/N;more;){p=more;more=p/N;s[i++]=p-more*N;\x0dm++; //有效节数增一}return m; //返回有效节数}int main(){unsigned int *s; //存放结果\x0dint i; //循环变量\x0dint m; //存放节数\x0dint n; //求n的阶乘\x0dcout<<"请输入一个正整数<0----10000:";cinn;if(n<0){cout<<"输入数据错误!"<<endl;return 0;}else if(n==0){cout<<"0!==1"<<endl;return 0;}//初始化ss=(unsigned int *)malloc(n*sizeof(s)*10);\x0dfor(i=1;i<n;i++) s[i]=0;s[0]=1;//计算结果for(i=2;i<=n;i++) m=compute(s,i);\x0dwhile(s[m]==0) m--;//过滤掉前面的零//输出结果cout<<n<<"!=="<<s[m--];//最高一节int num=1;for(i=m;i=0;i--){num++;cout<<','<<setw(3)<<setfill('0')<<s[i];