大數階乘

來源:互聯網
上載者:User

標籤:style   blog   color   io   for   re   

一個頭疼的程式;計算100以內的階乘。

這是我的程式,可計算10000以內的階乘:

 1 #include<stdio.h> 2  3 void fac(int val){ 4 int i,n,c; 5         int k; 6         int t[1000]={1}; 7         k=0; 8         for(n=1;val>1;val--){ 9             for(c=0,i=0;i<n;i++){10                 k=t[i]*val+c;11                 t[i]=k%10000;12                 c=k/10000;13             }14             t[i]=c;15             if(t[i]>0)n++;    16         }17         printf("%d",t[--n]);18         for(n--;n>=0;n--)19             printf("%.4d",t[n]);20         printf("\n");    21 }22 int main(){23         int a,n,i;24         scanf("%d",&n);25         for(i=1;i<=n;i++){26             scanf("%d",&a);27             fac(a);28         }29     }

結果雖然正確,但參考了別人的演算法,自己想了很久還是不行,最後弄完後總算鬆了口氣。

直到我看到下面這個程式,才發現My Code就是一堆狗屎。

優秀的代碼:

 1 /*Small factorials*/ 2   3 #include<stdio.h> 4   5 void fact(short int); 6 void print(void); 7   8 short int factorial[80]; 9 short int length;10  11 int main()12 {13     short int i,n,t;14     scanf("%d",&t);15     for(i=1;i<=t;i++)16     {17         scanf("%d",&n);18         fact(n);19         print();20     }21     return 0;22 }23  24 void fact(short int n)25 {26     short int i,j,sum,temp;27     for(i=1;i<80;i++)28         factorial[i]=0;29     factorial[0]=1;30     length=1;31     for(i=2;i<=n;i++)32     {33         j=temp=0;34         while(j<length)35         {36             sum=temp+factorial[j]*i;37             factorial[j]=sum%100;38             j++;39             temp=sum/100;40         }41         while(temp>0)42         {43             factorial[j++]=temp%100;44             temp/=100;45             length++;46         }47     }48 }49  50 void print(void)51 {52     short int i;53     printf("%d",factorial[length-1]);54     for(i=length-2;i>=0;i--)55     {56         if(factorial[i]>=10)57             printf("%d",factorial[i]);58         else59             printf("0%d",factorial[i]);60     }61     printf("\n");62 } 

1丶格式上,後者清晰明了,函數的聲明,變數的定義,該空行的空行,而我唯一做到的只是該縮排的縮排了。

2丶變數命名上,後者所用到的英文簡易但明了,該用單詞的就用單詞,而我就是一堆的i,j,k,l,c;完全就看不懂。

3丶以上兩點直接決定了代碼的可讀性,易讀性。後者是優秀代碼,我的就是幼兒園剛學畫畫的。

4丶內容上,後者代碼結構嚴謹,每一個變數都考慮到了,靈活應用了函數,全域變數等簡單基礎,思維清晰。剖有標準風範,我的一看便是初學者。

5丶結果上,後者嚴格按照題目要求,100就是100,可見其控制記憶體能力之強。我的就是隨意啦,很不嚴格。

綜上所述,My Code風格與思想需要重塑。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.