如何用C++编写程序计算n!?

如题所述

#include"iostream.h"
#include"math.h"
#include"stdlib.h"
#include"iomanip.h"

int getn()
{
int n;
cout<<"请输入N!中的N\n";
cin>>n;
while(n<0)
{
cout<<"输入有错!请重新输入!"<<endl;
cin>>n;
}
if(n==0)
exit(1);
return n;
}

int getbitnum(int n)
{
double sum=1.0;
for(int i=1;i<n;i++)
sum+=log10(i);
return (int)sum;
}

char * init(int size)
{
char *pa=new char[size];
if(!pa)
{
cout<<"too large factor of"<<size<<endl;
exit(1);
}
pa[0]=1;
for(int i=1;i<size;i++)
pa[i]=0;
return pa;

}

void calc(char *a,int n)
{
double bitcount=1;
int begin=0;
for(int i=2;i<=n;i++)
{
long and=0;
bitcount+=log10(i);
if(a[begin]==0)
begin++;

for(int j=begin;j<int(bitcount);j++)
{
and+=i*a[j];
a[j]=char(and%10);
and/=10;
}
}
}

void display(char *a,int size)
{
int bit=0;
for(int i=size-1;i>=0;i--)
{
if(bit%60==0)
cout<<endl<<"第"<<setw(3)<<(bit/50+1)<<"个50位:";
cout<<(int)a[i];
bit++;
}
cout<<endl;
}

void main()
{
int n=getn();
int size=getbitnum(n);
char *pa=init(size);
calc(pa,n);
display(pa,size);
delete []pa;
}
楼上的几位代码没有错误,我赞同。但是只能算一些n比较小的阶乘,遇到数字大的就会溢出。楼主可以试试1000的阶乘。我的这个可以算大一点的数
温馨提示:内容为网友见解,仅供参考
无其他回答

c++ 求n!的算法
cin>>n;for(i=1,s=1;i<=n;i++)s=s*i;cout<<n<<"!="<<s<<endl;} 第二种用函数递归的方法:include <iostream.h> int fun(int n);void main(){ int n;unsigned long s;cout<<"求阶乘:n!=1*2*3...*n"<<endl<<"请输入n:";cin>>n;cout<<n<<"!="<<fun(n)<<...

编写C++程序,计算n!
include"iomanip.h"int getn(){ int n;cout<<"请输入N!中的N\\n";cin>>n;while(n<0){ cout<<"输入有错!请重新输入!"<<endl;cin>>n;} if(n==0)exit(1);return n;} int getbitnum(int n){ double sum=1.0;for(int i=1;i<n;i++)sum+=log10(i);return (int)sum;} ...

C++中如何编写求阶乘n!的函数
n!= n×(n-1)×…×3×2×1,且0!=1 在子函数中只需一个数据x,故设一个参数n 计算结果要返回主函数,故设一个变量result n的阶乘可在一重循环中实现 函数 fac()计算阶乘n!int fac(int n){int result = 1;if(n<0)return -1;else if(n == 0)return 1;while (n>1){res...

求N!的两简单C++程序
void main(){ int N;printf("%d",f(N));}

c++编程题 编写函数实现求n!,主程序要求输入n的值,用函数调用的方式求n...
限于整型数据的数据范围,所以实际上这个程序只能求n<=12的情况。如果想求更大的,必须为这个阶乘自定义一个数据类型。include<iostream> using namespace std;int fact(int n); int main(){ int n; cout<<"求n!,请输入n:\\n";cin>>n; cout<<fact(n)<<endl;return 0;} \/...

c++编程题 编写函数实现求n!,主程序要求输入n的值,用函数调用的方式求n...
\/\/注意,限于整型数据的数据范围,所以实际上这个程序只能求n<=12的情况。如果想求更大的,必须为这个阶乘自定义一个数据类型。#include<iostream>using namespace std;int fact(int n);int main(){ int n; cout<<"求n!,请输入n:\\n"; cin>>n; cout<<fact(n)<<endl; return 0;}\/\/下面是使用递归函...

C++中如何编写求阶乘n!的函数
计算公式为:n!= n×(n-1)×…×3×2×1,且0!=1 在子函数中只需一个数据x,故设一个参数n 计算结果要返回主函数,故设一个变量result n的阶乘可在一重循环中实现 函数 fac()计算阶乘n!int fac(int n){ int result = 1;if(n<0)return -1;else if(n == 0)return 1;while (...

用C++编写求N! (N很大,小于等于1000)为不使其溢出,有什么妙法?(最好有...
使用链表,链表节点存放若干位数字,将该链表进行拼接组成数字。链表节点考虑包含数字(c中int型是2字节,使用4位数字即可,c++中int型是4字节,可使用10位有效数字)根据+链表前一节点+链表后一节点(双向链表),每次进行乘法计算的时候 低位数字 * N = 计算临时低位数字 计算临时低位数字 % (10的...

用c++实现n!的最后一位非零数的计算
n) return; for (int m = n; m; m \/= 5) { int q = m \/ 10, r = m % 10; cnt3 += q + (r >= 3); cnt5 += q + (r >= 5); \/\/ count the num whose last digit is 5 cnt7 += q + (r >= 7); cnt9 += q + (r >= 9); ...

用C++如何求n!的阶层
{ int i,n,rel;cout<<"输入n:"<<endl;cin>>n;for(i=1;i<n+1;i++)rel *= i;cout<<rel<<endl;return 0;} 递归:include <iostream> using namespace std;int fac(int);int main(){ int n,rel;cout<<"输入n:"<<endl;cin>>n;rel = fac(n);cout<<rel<<endl;return 0;}...

相似回答