1. 程式人生 > >最短的計算大數乘法的c程序

最短的計算大數乘法的c程序

div 強烈 tracking ati track trac 鍵盤輸入 void 精通

#include <stdio.h>
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語句和voidkeyword,
?? 去除回車和不必要的空格,總長度只194個字節。
?? 另外,程序刻意避免使用數組來存貯中間結果和終於結果。
?? 為此,使用了遞歸函數,同一時候,遞歸的使用也簡化了代碼。
? 4.在實際工作中,千萬不要寫這種程序。否則會被罵死。
? 5.不要用這個程序考你的學生和面試者,即使他宣稱精通C語言。

此類最短程序的特點
1.常常使用全局變量,全局變量的長處是
? 1).自己主動初始化數組和單變量為0,可省去某些變量初始化語句。
? 2).數組初始化為0也使得邏輯更簡單。可省去某些邊界值的推斷。
? 3).在子程序,直接使用全局變量可省去某些參數定義和參數傳遞語句。

2.在表達式。大量使用“++”或者“--”之類運算符,此類語句往往起到
一箭雙雕的效果,可有效的縮短代碼長度.但在工作中。我強烈反對使用
這類運算符。

3.在比較語句中。非常少使用if(i>=0)這類語句,而是使用“if(i)”這種
寫法,這種寫法比">=0"少了3個字母。

最短的計算大數乘法的c程序