当前位置:编程学习 > C/C++ >>

用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 定义类型

上一个:用c++编写ping的相关操作需要哪些函数?
下一个:C++有个错,求高人给改下!!!!!

CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,