求10000以内n的阶乘
第一次把“carry”与“各位相乘”两个过程进行了分离,然后时间复杂度超了……
想不到合在一起居然可以过!
(理论上两种方式的复杂度只是隔了2倍而已,Ծ‸Ծ)
1 #include<iostream> 2 #include<cstdio> 3 #include<cstring> 4 5 using namespace std; 6 const int N=36000; 7 8 int main(){ 9 int n,a[N]; 10 memset(a,0,sizeof(a)); 11 cin>>n; 12 a[0]=a[1]=1; 13 for(int i=1;i<=n;i++){ 14 int carry=0; 15 for(int j=1;j<=a[0];j++){ 16 int tmp=a[j]*i+carry; 17 a[j]=tmp%10; 18 carry=tmp/10; 19 } 20 //处理最高位 21 while(carry){ 22 a[0]++; 23 a[a[0]]=carry%10; 24 carry/=10; 25 } 26 } 27 if(n<1)cout<<"0"; 28 else{ 29 for(int i=a[0];i>0;i--){ 30 cout<<a[i]; 31 } 32 } 33 return 0; 34 }