用C++怎么计算很大数字的阶乘
追问:然后应该怎么得到这个大数呢~
追问:然后应该怎么得到这个大数呢~
答案:刚写的代码,没有优化,默认最大长度是100位,有问题可以问我。#include <stdio.h>
#include <windows.h>#define Max 100
int deep=0;//进位深度void Carrybit(int n,int array[],int i,int j);
void Funciton(int n,int array[],int i,int j);void Carrybit(int n,int array[],int i,int j)
{
if(j+1==Max)
{
printf("Error!");
system("pause");
exit(0);
}
if(array[j+1]!=-1)
{
Funciton(n,array,i,j+1);
array[j+1]+=array[j]/10;
if(array[j+1]>=10)
{
Carrybit(n,array,i,j+1);
}
}
else
{
array[j+1]=array[j]/10;
}
array[j]%=10;
deep++;
}void Funciton(int n,int array[],int i,int j)
{
if(deep>0)
{
deep--;
return;
}
else if(array[j]==-1)
{
return;
}
array[j]*=i;
if(array[j]>=10)
{
Carrybit(n,array,i,j);
}
}void main()
{
int i,j,n;
int array[Max]={1};//保存每一位的数字,最多Max位
printf("Please input n:");
scanf("%d",&n);
if(n<=0)
{
printf("n must > 0\n");
system("pause");
return;
}
for(j=1;j<Max;j++)
{
array[j]=-1;
}
for(i=1;i<=n;i++)
{
for(j=0;j<Max;j++)
{
Funciton(n,array,i,j);
}
}
printf("n!=");
for(j=Max-1;j>=0;j--)
{
if(array[j]!=-1) printf("%d",array[j]);
}
printf("\n");
system("pause");
}把大数保存到字符数组里建个循环嘛,模式挺的! 并且算阶乘有通用的模式的建立两个长整数组就行了啊…如果你学过汇编,那就知道应该是很简单的事情了……用string类吧,当然char数组也行,反正是没有长度限制,然后再模仿乘法运算相乘进位。用unsigned int 定义类型