#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;
}
但你没释放它
而且还在一个循环里,不直线增加才怪
适当的时候delete 它
delete[] num_arry; //删除原空间以减少内存开支
num_arry=temp;这样不行吗?
new了多少次就要对应的delete多少次