本文為大大維原創(chuàng),最早于博客園發(fā)表,轉(zhuǎn)載請注明出處?。。?/strong>

一、概述

  C/C++中的int類型能表示的范圍是-2E31-2E31–1。unsigned類型能表示的范圍是0-2E32–1,即 0-4294967295。所以,int和unsigned類型變量,都不能保存超過10位的整數(shù)。有時我們需要參與運算的數(shù),可能會遠遠不止10 位,例如,可能需要保留小數(shù)點后面100位(比如求π的值),那么,即便使用能表示很大數(shù)值范圍的double變量,但是由于double變量只有64位,所以還是不可能達到精確到小數(shù)點后面100位這樣的精度。double變量的精度也不足以表示一個100位的整數(shù)。一般我們稱這種基本數(shù)據(jù)類型無法表示的整數(shù)為大數(shù)。如何表示和存放大數(shù)呢?在c語言下,我們可以用數(shù)組存放和表示大整數(shù),一個數(shù)組元素,存放大數(shù)中的一位。而在c++中,使用標準庫的string類型,使得大數(shù)問題的計算更加實用(沒有最大值的限制),更加靈活(輸入更加簡潔方便),更加簡單(可以方便的處理小數(shù)之間的運算)。

二、算法原理簡單描述:

看如下大整數(shù)的加法運算:

移動開發(fā)培訓,Android培訓,安卓培訓,手機開發(fā)培訓,手機維修培訓,手機軟件培訓

  answer每一位都是num1、num2和carry的和,因此,我們在輸入加數(shù)和被加數(shù)的string之后,可以將內(nèi)容進行一次反轉(zhuǎn),這樣,answer[i]=num1[i]+num2[i]+carry[i-1]。反轉(zhuǎn)的一個重要的原因是可以方便的將向前的進位和運算變?yōu)橄蚝蟮倪M位運算,有利于充分發(fā)揮string的特點。在這里,我們可以使用<algorithm>頭文件下的reverse()函數(shù)方便的實現(xiàn)string的內(nèi)容反轉(zhuǎn)。當運算完畢后,反轉(zhuǎn)回來即可。

網(wǎng)友評論