#include?char s[99],t[99]; int m,n; void r(int i,int c) { int j=0,k=i; while(k)c+=s[j++]*t[k---1]; if(i)r(i-1,c/10); printf(%d,c%10); } void main() { gets(s);gets(t); while(s[n])s[n++]-=48; while(t[m])t[m++]-=48; r(m+n-1,0); }
說明:
1.這個程序接收2個從鍵盤輸入的整數,計算他們的乘積,並輸出結果。
輸入的兩個整數的總長度不能大於99.
2.這個程序沒什麼大用,只是用來玩玩兒而已。
3.這個程序的主要目標是使用盡可能短的代碼來實現大數乘法。上面的代碼
可在VC下編譯並運行. 在GCC下編譯,可省略#include語句和void關鍵字,
去除回車和不必要的空格,總長度僅僅196個字節。
另外,程序刻意避免使用數組來存貯中間結果和最終結果。
為此,使用了遞歸程序,同時,遞歸的使用也簡化了代碼。
4.在實際工作中,千萬不要寫這樣的程序,否則會被罵死。
5.不要用這個程序考你的學生和面試者,即使他宣稱精通C語言。
此類最短程序的特點
1.經常使用全局變量,全局變量的優點是
1).自動初始化數組和單變量為0,可省去某些變量初始化語句。
2).數組初始化為0也使得邏輯更簡單,可省去某些邊界值的判斷。
3).在子程序,直接使用全局變量可省去某些參數定義和參數傳遞語句。
2.在表達式,大量使用“++”或者“--”之類運算符,此類語句往往起到
一箭雙雕的效果,可有效的縮短代碼長度.但在工作中,我強烈反對使用
這類運算符。
3.在比較語句中,很少使用if(i>=c)這類語句,而是使用“if(i)”這樣的
寫法,這種寫法比>=c少了3個字母。