#include<fstream>
#include<iostream>
#include <stdio.h>
using namespace std;
int a[1000000]={0};
/*此处是关键,当将a数组定义在main内时,则超时。在外面可避免超时*/
int main()
{
int n;
int i,len=1,j,temp=0;
/*temp为溢出位的溢出量,len为数初始长度*/
scanf("%d",&n);
a[0]=1;
/*数的初始值*/
for(i=2;i<=n;i++)
{
for(j=0;j<len;j++)
{
a[j]=i*a[j]+temp;
/*求每一位的数的临时乘积*/
temp=a[j]/10;
/*该位溢出部分*/
a[j]%=10;
/*去掉溢出部分剩余的值作为该位的最后临时值*/
}
while(temp!=0)
/*处理最高位溢出情况*/
{
a[j++]=temp%10;
temp/=10;
}
len=j;
/*求乘完一个阶乘项后数的长度*/
}
len+=50-len%50;
/*不足50位,用0补充*/
ofstream outFile;
outFile.open("c://test.txt");
if(outFile.is_open())
{
for(i=len-1;i>=0;i--)
{
outFile<<a[i];
}
}
outFile.close();
system("Pause");
return 0;
}
评下这个代码:
//int a[1000000]={0};
/*此处是关键,当将a数组定义在main内时,则超时。在外面可避免超时*/
我就不能理解了,数组a放在main内与main外,与运行时间有什么关系?
估计他是想说, 数组a放在main内, 那么a在栈上分配,会导致栈溢出
而放在main外,a则在静态存储区分配。
//int i,len=1,j,temp=0;
/*temp为溢出位的溢出量,len为数初始长度*/
这么短的代码,命名感觉不合逻辑,
int i, j,len,temp;
len = 1;
temp = 0;
//scanf("%d",&n);
不明白 #include<iostream> 这东西是用来做什么的,?
cin >> n;
//system("Pause");
这不是c里面的东西吧。
看别人都是写 cin.get();
//看不出来这代码有什么优化的地方,?
[
本帖最后由 BlueGuy 于 2010-5-25 19:08 编辑 ]