本文為大大維原創(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ù)的加法運算:
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)回來即可。
延伸閱讀
- ssh框架 2016-09-30
- 阿里移動安全 [無線安全]玩轉(zhuǎn)無線電——不安全的藍牙鎖 2017-07-26
- 消息隊列NetMQ 原理分析4-Socket、Session、Option和Pipe 2024-03-26
- Selective Search for Object Recognition 論文筆記【圖片目標分割】 2017-07-26
- 詞向量-LRWE模型-更好地識別反義詞同義詞 2017-07-26
- 從棧不平衡問題 理解 calling convention 2017-07-26
- php imagemagick 處理 圖片剪切、壓縮、合并、插入文本、背景色透明 2017-07-26
- Swift實現(xiàn)JSON轉(zhuǎn)Model - HandyJSON使用講解 2017-07-26
- 阿里移動安全 Android端惡意鎖屏勒索應(yīng)用分析 2017-07-26
- 集合結(jié)合數(shù)據(jù)結(jié)構(gòu)來看看(二) 2017-07-26