void initial()初始化数组和输入数,
void multi()进行一次中间结果和整型相乘,放入结果数组,
void copynum()把结果数组放入中间结果数组,结果数组清零,
void clearmax()设置每次该循环的次数,使得程序不空循环,
void output()输出结果.
PS:现在计算速度还不是很好,如果对于大于十万的需要采用中间结果文本记录或者数组保存,
那样对于百万以上的计算才可行.
#include <direct.h>
#include <iostream.h>
#include <stdio.h>
#include <vector>
#include <string>
#include <time.h>
#include <fstream.h>
int max=100;
int des[1000000];
int temp[1000000];
int innum=100;
int increaseleap=5;
void output();
void initial()
{
for(int i=0;i<100000;i++)
{
des[i]=0;
temp[i]=0;
}
i=0;
increaseleap=1;
while(innum)
{
temp[i]=(int)innum%100;
innum=(int)innum/100;
i++;
increaseleap++;
}
cout<<"initial:"<<endl;
bool flag=false;
for(i=max;i>=0;i--)
{
if(temp[i]!=0) flag=true;
if(flag)
cout<<temp[i];
}
cout<<endl<<"initial end"<<endl;
}
inline void multi()
{
int add=0;
double total=0;
max+=increaseleap;
for(int i=0;i<max;i++)
{
total=temp[i]*innum+add;
des[i]+=(int)total%100;
add=(int)total/100;
//if(add>100)
//cout<<"=========================wrong"<<endl;
}
if(des[max]>0)
{
cout<<"计算溢出,答案错误!!!!!!"<<endl;
getchar();
exit(0);
}
}
void clearmax()
{
cout<<"old max: "<<max<<endl;
for(int i=max;i>=0;i--)
{
if(temp[i]!=0)
{
max=i+10;
break;
}
}
cout<<"new max: "<<max<<endl;
//getchar();
}
inline void copynum()
{
for(int i=0;i<max;i++)
{
temp[i]=des[i];
des[i]=0;
}
}
void output()
{
bool flag=false;
int k=1;
fstream fp;
fp.open("1.txt",ios::out);
cout<<"result:"<<endl;
for(int i=max;i>=0;i--)
{
if(temp[i]!=0)flag=true;
if(flag)
{
if(temp[i]<10)
{
cout.width(1);
cout<<"0"<<temp[i]<<"/t";
fp.width(1);
fp<<"0"<<temp[i]<<"/t";
}
else
{
cout.width(2);
cout<<temp[i]<<"/t";
fp.width(2);
fp<<temp[i]<<"/t";
}
if(k%20==0)
fp<<endl;
k++;
}
//if(i%10==0)
if(flag&&(i%500==0))
{
// getchar();
cout<<endl;
}
}
cout<<endl<<"total line number= "<<k<<endl;
cout<<"/noutput end"<<endl;
fp.close();
}
void main()
{
clock_t t1,t2;
cout<<"输入innum:"<<endl;
cin>>innum;
int i=innum;
int steppercent=i/100;
int timepercent=0;
int percent=1;
cout<<endl<<"输入数字是"<<innum<<endl;
initial();
t1=clock();
t2=clock();
while(i>1)
{
i--;
innum=i;
multi();
copynum();
timepercent++;//输出进度
if(timepercent>steppercent)
{
cout<<percent++<<"%"<<endl;
cout<<"Runing time: "<<clock()-t2<<endl;
t2=clock();
timepercent=0;
clearmax();
}
}
cout<<"Runing time= "<<clock()-t1<<endl;
t1=clock();
output();
cout<<"Out put time= "<<clock()-t1<<endl;
cout<<"max= "<<max<<endl;
getchar();
}