求10000以内n的阶乘

求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 }

 

posted @ 2021-08-01 10:21  Rekord  阅读(105)  评论(0编辑  收藏  举报