1. 大數加法
很簡單就不說了
2. 大數乘法
基本原理:
1,把兩個數字 a 和 b 轉換成字元,放到字元陣列裡;或者把數字的每一位隔離開分別放到陣列裡作為一位,這樣更方便乘法處理。這樣做的根本好處是:相乘的時候不會造成溢位。2,結果陣列的長度,最大應該是 a 的長度+ b 的長度 + 1,所以定義乙個這樣的陣列;
3,過程很簡單了:a 中的第i位乘以 b 中的第 j 位,儲存在 c 中的第 i+j 位;
4,後期處理。注意,經過第三步處理過的 c 中的結果,每一位都可能向高位進製;比如說,c[8] = 24。這時候就要從低位開始把進製部分向高位加,一次迴圈即可:
for(i=0;i
這時候就計算完畢了。
但是,第3行和第7、8行實際上是可以放到一起的。考試大提示只要任意一次計算導致了c[k]的值》10,那麼立刻進行進製處理。於是提高之後的版本是:
for(i=0;i關於進製這個事情,多項式就沒有這個問題,因為每一項的係數可以》10。不過他也有他自己的處理:如果係數為0的話,就把該項刪除,呵呵。
完整大數乘法程式**
#include "stdafx.h"
#include #include using namespace std;
void multiply(const char *a,const char *b);
int main()
void multiply(const char *a,const char *b)
char *c=(char *)malloc((ca+cb)*sizeof(char)); //分配字元陣列空間,因為它比int陣列省!
i=0;while(s[i]==0) i++; // 跳過頭部0元素
for (j=0;i
大數運算之大數相減
大數減法運算 第一次在csdn寫部落格,督促自己不斷學習 鞏固和進步,希望能和大家一起成長 在程式設計實現整數運算時,作為程式猿 媛,我們知道計算機中的int long或者long long的所佔的記憶體空間是有限的,當整數超過一定大小,這些型別就無法表示整數的值,否則資料會被 截斷 無法得到正確的...
大數運算 冪次方運算
以下演算法計算n的m次方 m的定義域是 1,2 31 n的定義域是 0,65535 原理就是按位相乘,處理進製 include include include void main void std vectorvecnum 1,n 用vector儲存大數,首位賦n for int i 0 i m 1...
超長整數運算(大數運算)
說明基於記憶體的有效運用,程式語言中規定了各種不同的資料型態,也因此變數所可以表達的最大整數受到限制,例如123456789123456789這樣的整數就不可能儲存在long變數中 例如c c 等 我們稱這為long數,或俗稱大數運算。解法乙個變數無法表示超長整數,則就使用多個變數,當然這使用陣列最...