大整型數一般是4個位元組,但一般會遇到超大數的運算,那麼系統提供的int、long就不夠用了。因此,必須自定義大整型類,**如下所示。
(1)如何建立及描述大整型數。乙個方案是通過字串輸入建立,通過解析字串,把每位存入stl提供的容器中。由於會遇到進製問題,即對容器頭進行進製插入操作,從這一點看deque雙端佇列更好。
(2)關於大整形的加法演算法,即類中的add函式。
定義結果大整型變數result
求被加數字與加數字數差n
if n>=0 then
從高位開始,加數所有位與被加數對應為相加,每位結果和存入result後面
把被加數多餘位存入result前面
else
從高位開始,被加數所有位與加數對應為相加,每位結果和存入result後面
把加數多餘位存入result前面
endif
result
返回給result給呼叫者
類中adjust函式進行大整型數字置調整,保證每位小於10。用表意形式說明如下:設mybignum1 = ,mybignum2 = ,經過上述add函式1-9步結果為mybignum result = ,兩位數都大於10,因此必須呼叫adjust調整函式,使最終結果為result = 。adjust演算法如下
獲得待調整大整型數容器的長的nsize
for 從最低位開始到次高位,迴圈依次調整每一位
若當前值小於10,轉到2
當前位的值等於當前值對10取餘
利用while迴圈把進製值依次加到前面位的值中
end for
if 最高位置大於10
最高位值等於當前值對10取餘
改變容器的大小,利用while迴圈把進製值依次填充新加位的值
endif
(3)關於大整形的乘法演算法,即類中的multiply函式。用表意形式說明如下:設mybignum1 = ,mybignum2 = ,mybignum3 = mybignum1 * mybignum2 = * 7 + * 6 + * 5。即被乘數後面補充適當的0後與乘數每位向乘後再相加。adjust演算法如下
定義結果大整型數result,初始值為0,用於累加
定義臨時大整型數變數mid
for i=0,i《乘數字數,i++
mid
mid尾部新增適當個數0元素
mid中每位值等於mid中每位當前值乘以乘數從低位開始的第i位數
result
end for
返回result給呼叫者
**
# include# include # include # include # include # includeusing namespace std;
class mybigdata
mybigdata(string strnum) //通過字串建立大整數
deque::iterator begin() //開始迭代指標
deque::iterator end() //迭代止指標
int size() //容器大小
back_insert_iterator>back_inserter()
void push_front(int n) //前插入元素
void push_back(int n) //後插入元素
void adjust() //調整使容器的每位整型元素值都小於10
int value = v[0]; //處理最高位
if (value >= 10)
}nsize = v.size();
} mybigdata add(mybigdata&m)
}else
}result.adjust(); //結果調整
return result;
} mybigdata mutiply(mybigdata &m)
transform(mid.begin(),mid.end(),mid.begin(),bind2nd(multiplies(),*(m.begin()+i)));//被乘數分別乘以每一位乘數
result = mid.add(result); //分項之和累加
} return result;
}};int main()
執行結果
大整數問題,乘法,加法,階乘
大整數相乘 c i j a i b j 陣列的每一位相乘然後相加,並得到最終結果 再考慮進製問題 include include define size 50 int a size b size c size 2 void big multi int a,int b,int c c k 0 prin...
js 大整數加法 乘法 除法
有一定的程式設計經驗的人都知道,當我們對資料操作的時候,若資料過大,計算機將這個大數從十進位制的轉為二進位制的,是沒有那個型別的放的了的,因此,我們經常將乙個大數轉化為字串來操作。接下來我將演示大整數的加法 乘法 除法操作。附 不考慮負數 思路 我們將兩個數進行逆序轉換,然後按位進行相加,將相加的結...
c 大整數加法 減法 乘法
大整數加法 大整數減法 大整數乘法 大整數除法 還未寫 大整數的加法 先對資料進行預處理是兩個大整數的位數相等,位數少的那個數在高位補0,使兩數的位數相等,便於計算資料的進製,只需要在函式呼叫的結尾檢查一下最高為是否存在進製的情況,如果需要進製則只需要在最後將進製的數加入到返回值中。加法是對兩個數從...