乘法如何突破位數限制

2021-09-19 10:16:59 字數 1199 閱讀 3962

如果我們用int或double等進行乘法運算是有位數和精確度的限制,如何突破這種限制呢?當然只能自己寫乙個乘法運算。

如果我們用筆和紙進行乘法運算是沒有位數和精確度限制的,那麼我們是否可以模擬用筆和紙做乘法運算呢?在一定範圍內是可以。首先我們可以肯定,一位數乘一位數是可以實現的,然後我們可以設定兩個char陣列a[n]和b[n]來個記錄兩個n位數,無論是小數還是整數,然後設定乙個int陣列c[2n]來記錄結果。注意:n位數乘m位數的結果必定是在n+m位數之內。計算過程就是,a[n]和b[n]中,每兩個數的相乘,將結果放在c[2n]中的相應位置,最後進行滿10進1的計算得到結果。下面是**:

#include #include #include int main(void)

; char b[1024] = ;

int c[2048] = ;

int an, bn;

scanf("%s", a);

scanf("%s", b);

an = strlen(a);

bn = strlen(b);

// 捨去末尾的 0

for (int i = an - 1; i >= 0; i--)

} for (int i = bn - 1; i >= 0; i--)

} // 計算小數點的位數及捨去小數點

int ap = 0, bp = 0;

if (strchr(a, '.'))

ap--;

an--;

} if (strchr(b, '.'))

bp--;

bn--;

} int cp = ap + bp;

// 乘法計算

for (int i = 0; i < bn; i++)

} // 滿10進1

for (int i = 0; i < an + bn; i++)

// 輸出及插入小數點

int start = 0;

for (int i = an + bn - 1; i >= 0; i--)

printf("%d", c[i]);

} } //system("pause");

return 0;

}

測試:

不限制位數的大數乘法

include include using std cout using std cin using std string using std ostream using std istream class bignum bignum string v valuestr v string size ...

如何突破區域網限制

如何突破區域網限制,需要分限制情況進行說明 一 單純的限制某些 不能訪問,網路遊戲 比如聯眾 不能玩,這類限制一般是限制了欲訪問的ip位址。對於這類限制很容易突破,用普通的http 就可以了,或者socks 也是可以的。現在網上找http 還是很容易的,一抓一大把。在ie裡加了http 就可以輕鬆訪...

突破wap閘道器限制

解決思路 在wap閘道器和檔案伺服器之間加一層 伺服器,閘道器請求過來只到 伺服器,而不會到真正訪問到你的資源你伺服器。伺服器按照客戶端的請求引數每次去檔案伺服器上拿取檔案。技術關鍵點 1 伺服器與檔案伺服器之間連線的建立 2 輸入流和輸出流,位元組偏移量的設定 伺服器 3 伺服器輸出檔案型別 實現...