標籤: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風格與思想需要重塑。