#include<iostream>
#include<fstream>
#include<time.h>
using namespace std;#define DEFAULT_LENGTH  100//默认数组的num_arry长度
#define DEFAULT_STEP 100 //num_arry的默认递增值int main()
{
//定义要用的数量
int *num_arry=NULL; //存放计算结果的数组
int comp_num=0; //存放要计算的数
int arry_length=0; //数组num_arry当前长度
int arry_used=1; //数组num_arry已用的个数
int arry_index=0; //当前是数组num_arry的下标;
int *int_temp=NULL; //存放临时数据
int i,k,*temp;

//计算过程

cout<<"输入要阶乘的数:";
cin>>comp_num;
cout<<"计算中,请稍候..."<<endl;
arry_length=DEFAULT_LENGTH;
double start=clock(); //记录起始时间
num_arry=new int[DEFAULT_LENGTH];//申请存放计算结果的空间
if(num_arry==NULL) exit(1);
num_arry[0]=1;
num_arry[1]=0;
for(i=2;i<=comp_num;i++) //阶乘开始
{
for(arry_index=((i-1)/5+(i-1)/25);arry_index<=arry_used;arry_index++) //扫描数组中的每一个数,对大于9的进行进位
{
num_arry[arry_index]*=i; //与数组中的每一位相乘
if(num_arry[arry_index-1]>9) //对大于9的进行处理
{
if(arry_index>=arry_used) //在最高位有进位时
{
num_arry[++arry_used]=0; //增加一位,并进行初始化
if(arry_used+1>=arry_length) //当数组容量不够时,对数组进行扩充
{
temp=new int[arry_length+DEFAULT_STEP]; //申请新的空间
if(temp==NULL) exit(1);
for(k=0;k<arry_length;k++) //把原空间中的内容复制到新的空间中去
{
temp[k]=num_arry[k];
}
delete[] num_arry;   //删除原空间以减少内存开支
num_arry=temp;
temp=NULL;
arry_length+=DEFAULT_STEP;
}//if当结果位数大于数组位数时
}//if 当结果位数增加时
num_arry[arry_index]+=num_arry[arry_index-1]/10;//大于9部分向上进位
num_arry[arry_index-1]=num_arry[arry_index-1]%10;//保留小于10部分
}//if 当数组中有一个数大于10时
}//  for进行阶乘运算
}
double finish=clock(); //记录终止时间
ofstream outfile;
outfile.open("result.txt");
outfile<<"结果是:";
for(i=arry_used-1;i>=0;i--) //输出结果到文件
{
outfile<<num_arry[i];
if(i%3==0) outfile<<",";
}
outfile<<endl;
outfile<<"共"<<arry_used<<"位"<<endl; //输出位数到文件
outfile<<"用时:"<<(finish-start)/1000<<"秒"<<endl;//输出时间到文件
outfile.close();
cout<<"文件已经保存到"<<endl;
system("cd=");
cout<<"result.txt中"<<endl;
cout<<"共"<<arry_used<<"位"<<endl;
cout<<"用时:"<<(finish-start)/1000<<"秒"<<endl;
cin.get();
cin.get();
delete[] num_arry;
cin.get();
return 0;
}

解决方案 »

  1.   

    temp=new int[arry_length+DEFAULT_STEP]; //申请新的空间
    但你没释放它
    而且还在一个循环里,不直线增加才怪
    适当的时候delete 它
      

  2.   

    下面不是有删除上次申请的内存块的语句吗:
    delete[] num_arry;   //删除原空间以减少内存开支
    num_arry=temp;这样不行吗?
      

  3.   

    拜托,你是释放了num_arry这个指针变量作存放的内存地址块的内存,可是temp这个指针变量里存放的内存地址块的内存你又没有释放!!!
      

  4.   

    你的程序中 temp 和 num_array是两块不同的动态申请的空间 两个都要用delete[]来释放才行
    new了多少次就要对应的delete多少次