Pascal高精度運(yùn)算(加減法)_第1頁
Pascal高精度運(yùn)算(加減法)_第2頁
Pascal高精度運(yùn)算(加減法)_第3頁
Pascal高精度運(yùn)算(加減法)_第4頁
Pascal高精度運(yùn)算(加減法)_第5頁
已閱讀5頁,還剩22頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、 類型類型數(shù)值范圍數(shù)值范圍 占字節(jié)數(shù)占字節(jié)數(shù) Byte 0 . 255 1 Word 0.65535 2 Shortint -128 . 127 1 Integer -32768.32767; 2 Longint -2147483648 . 2147483647 4 Longword 0.4294967295 4 Int64 -9223372036854775808 . 9223372036854775807 8 QWord 0 . 18446744073709551615 8高精度算法入門 高精度運(yùn)算是指參與運(yùn)算有數(shù)或運(yùn)算結(jié)果遠(yuǎn)遠(yuǎn)超過計(jì)算機(jī)語言中能夠表示的數(shù)的范圍的特殊運(yùn)算。 例如:編程解決

2、求A+B的值,其中A,B的值=1040 ; 高精度運(yùn)算的思想就是運(yùn)用字符串和一維數(shù)組的方式高精度運(yùn)算的思想就是運(yùn)用字符串和一維數(shù)組的方式模擬運(yùn)算模擬運(yùn)算 口訣就是口訣就是: :用字符串讀入數(shù)據(jù),轉(zhuǎn)化數(shù)據(jù)類型用字符串讀入數(shù)據(jù),轉(zhuǎn)化數(shù)據(jù)類型, ,用數(shù)組用數(shù)組存儲(chǔ)數(shù)據(jù)存儲(chǔ)數(shù)據(jù), ,并加以運(yùn)算:并加以運(yùn)算: 高精度運(yùn)算涉及到的問題:高精度運(yùn)算涉及到的問題:1 1、數(shù)據(jù)的輸入。、數(shù)據(jù)的輸入。2 2、數(shù)據(jù)的存儲(chǔ)。、數(shù)據(jù)的存儲(chǔ)。3 3、數(shù)據(jù)的運(yùn)算:進(jìn)位和借位。、數(shù)據(jù)的運(yùn)算:進(jìn)位和借位。4 4、結(jié)果的輸出:小數(shù)點(diǎn)的位置、處理多于的、結(jié)果的輸出:小數(shù)點(diǎn)的位置、處理多于的0 0等。等。一、高精度運(yùn)算:一、高精度運(yùn)

3、算:加法加法題目要求:題目要求:輸入:輸入:第一行:正整數(shù)第一行:正整數(shù)a。第二行:正整數(shù)第二行:正整數(shù)b。已知:。已知:a和和b(10240)。)。輸出:輸出:ab的值。的值。樣例輸入:樣例輸入:99999樣例輸出:樣例輸出:1098高精度加法解決的問題:高精度加法解決的問題:、數(shù)據(jù)的輸入。、數(shù)據(jù)的輸入。、數(shù)據(jù)的存儲(chǔ)。、數(shù)據(jù)的存儲(chǔ)。、加法運(yùn)算,注意進(jìn)位處理。、加法運(yùn)算,注意進(jìn)位處理。、結(jié)果的輸出。、結(jié)果的輸出。、數(shù)據(jù)的輸入。、數(shù)據(jù)的輸入。a和和b(len2 then len:=len1 else len:=len2;for i:=1 to len do ci:=ai+bi;直接先計(jì)算直接先計(jì)

4、算計(jì)算后的計(jì)算后的ci可能可能=10,怎樣處理?怎樣處理?處理進(jìn)位:處理進(jìn)位:for i:=1 to len do begin ci+1:=ci+1+ci div 10; ci:=ci mod 10; end;、結(jié)果的輸出:數(shù)組、結(jié)果的輸出:數(shù)組c。if clen+10 then len:=len+1;for i:=len downto 1 do write(ci);onst maxn=240; c=a+b,先加,然后再處理進(jìn)位先加,然后再處理進(jìn)位var s1,s2:string; a,b:array1.maxn of integer; c:array1.maxn+1 of integer;

5、len,len1,len2,k,j,i:integer;begin readln(s1); 輸入輸入 readln(s2); len1:=length(s1); 數(shù)據(jù)的保存數(shù)據(jù)的保存 for i:= 1 to len1 do ai:=ord(s1len1+1-i)-48; len2:=length(s2); for i:= 1 to len2 do bi:=ord(s2len2+1-i)-48; if len1len2 then len:=len1 else len:=len2; for i:=1 to len do ci:=ai+bi; for i:=1 to len do begin ci

6、+1:=ci+1+ci div 10; ci:=ci mod 10; end; if clen+10 then len:=len+1; for i:=len downto 1 do write(ci);end./如果兩個(gè)數(shù)字的長度超過如果兩個(gè)數(shù)字的長度超過255那么我們在數(shù)據(jù)的輸入的過程中只能用字符數(shù)那么我們在數(shù)據(jù)的輸入的過程中只能用字符數(shù)組來完成存儲(chǔ)了組來完成存儲(chǔ)了!算法改進(jìn)一:邊計(jì)算邊處理進(jìn)位。算法改進(jìn)一:邊計(jì)算邊處理進(jìn)位。c=a+b,邊加邊處理進(jìn)位邊加邊處理進(jìn)位const maxn=240;var s1,s2:string; a,b:array1.maxn of integer; c:a

7、rray1.maxn+1 of integer; len,len1,len2,k,j,i:integer;begin readln(s1); readln(s2); len1:=length(s1); for i:= 1 to len1 do ai:=ord(s1len1+1-i)-48; len2:=length(s2); for i:= 1 to len2 do bi:=ord(s2len2+1-i)-48; if len1len2 then len:=len1 else len:=len2; for i:=1 to len do begin ci+1:=(ai+bi+ci) div 10

8、; ci:=(ai+bi+ci) mod 10; end; if clen+10 then len:=len+1; for i:=len downto 1 do write(ci);end.算法改進(jìn)二:結(jié)果存在數(shù)組算法改進(jìn)二:結(jié)果存在數(shù)組a中,不再定義多余的數(shù)組中,不再定義多余的數(shù)組c,減少,減少存儲(chǔ)空間。(最好的方法:存儲(chǔ)空間。(最好的方法:a=a+b)begin readln(s1); readln(s2); len1:=length(s1); len2:=length(s2); fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),0); for i

9、:=1 to len1 do ai:=ord(s1len1-i+1)-48; for i:=1 to len2 do bi:=ord(s2len2-i+1)-48; if len1len2 then len:=len1 else len:=len2; for i:=1 to len do begin ai+1:=ai+1+(ai+bi) div 10; ai:=(ai+bi) mod 10; end; if alen+10 then len:=len+1; for i:=len downto 1 do write(ai); writeln;end.高精度加法的應(yīng)用高精度加法的應(yīng)用Fibonac

10、ci數(shù)列數(shù)列 Fibonacci數(shù)列的代表問題是由意大利著名數(shù)學(xué)家數(shù)列的代表問題是由意大利著名數(shù)學(xué)家Fibonacci于于1202年年提出的提出的“兔子繁殖問題兔子繁殖問題”(又稱又稱“Fibonacci問題問題”)。問題的提出:有雌雄一對兔子,假定過兩個(gè)月后便每個(gè)月可繁殖雌雄問題的提出:有雌雄一對兔子,假定過兩個(gè)月后便每個(gè)月可繁殖雌雄各一的一對小兔子。問過各一的一對小兔子。問過n個(gè)月后共有多少對兔子?個(gè)月后共有多少對兔子?已知:已知:N=93。F(i):第第i個(gè)月后共有的兔子對數(shù)。個(gè)月后共有的兔子對數(shù)。F(1)=1; F(2)=1;f(3)=2;f(4)=3;f(5)=5;f(6)=8;F(

11、i)=f(i-2)+f(i-1)N=93/ qword可以處理可以處理1021只內(nèi)的正數(shù)運(yùn)算只內(nèi)的正數(shù)運(yùn)算var f:array1.100 of qword; var n,i:integer;begin readln(n); f1:=1; f2:=1; for i:=3 to n do fi:=fi-2+fi-1; writeln(fn);end.N0 then len:=len+1; f1:=f2;/算法描述算法描述 f2:=f; end; writeln(len); for i:=len downto 1 do write(fi);end.二二、高精度減法運(yùn)算、高精度減法運(yùn)算問題表述:問題

12、表述: 輸入輸入a a,b b(1010240240)兩個(gè)數(shù),輸出)兩個(gè)數(shù),輸出a-ba-b的值。的值。樣例樣例2 2輸入:輸入:99999910001000樣例樣例2 2輸出:輸出:-1-1樣例樣例1 1輸入:輸入:456456409409樣例樣例1 1輸出:輸出:4747算法:算法:1 1、讀入被減數(shù)、讀入被減數(shù)s1s1;2 2、讀入減數(shù)、讀入減數(shù)s2s2;3 3、如果、如果s1s2 s1s2s1s2,不交換,如果,不交換,如果s1s2s1s2,交換,交換s1s1和和s2s2,保證后邊,保證后邊s1-s2s1-s2。S1s2S1s2的條件:的條件:if (length(s1)length(

13、s2)orif (length(s1)length(s2)or (length(s1)=length(s2)and(s1s2) then (length(s1)=length(s2)and(s1s2) then begin begin fh fh:=-;:=-; s:=s1; s:=s1; s1:=s2; s1:=s2; s2:=s; s2:=s; end; end;然后數(shù)組然后數(shù)組a a存存s1s1,b b存存s2s2。計(jì)算。計(jì)算a=a-ba=a-b2 2、借位:、借位: if aibiif aibi then then begin begin ai+1:=ai+1-1; ai+1:=ai+

14、1-1; ai ai:=ai+10;:=ai+10; end; end; ai:=ai-bi ai:=ai-bi;a=a-ba=a-btype numtypetype numtype=array1.240 of integer;=array1.240 of integer;var a,b:numtypevar a,b:numtype; ; s1,s2,s:string; s1,s2,s:string; la,lb,k:integer la,lb,k:integer; ; i:integer i:integer; ; fh:char fh:char; ;beginbegin readln(s1)

15、; readln(s1); readln(s2); readln(s2); if s1=s2 then begin writeln(0);halt;end; if s1=s2 then begin writeln(0);halt;end; if (length(s1)length(s2)or if (length(s1)length(s2)or (length(s1)=length(s2)and(s1s2) then (length(s1)=length(s2)and(s1s2) then begin fh:=-;s:=s1;s1:=s2;s2:=s;end begin fh:=-;s:=s1

16、;s1:=s2;s2:=s;end; ; la:=length(s1); lb:=length(s2); la:=length(s1); lb:=length(s2); fillchar(a,sizeof(a),0); fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),0); fillchar(b,sizeof(b),0); for i:=1 to la do aifor i:=1 to la do ai:=ord(s1la-i+1)-48;:=ord(s1la-i+1)-48; for i:=1 to lb do bi for i:=1 to lb

17、do bi:=ord(s2lb-i+1)-48;:=ord(s2lb-i+1)-48; k:=la; k:=la; for i:=1 to k do for i:=1 to k do begin begin if aibi if aibi then then begin begin ai+1:=ai+1-1; ai+1:=ai+1-1; ai ai:=ai+10;:=ai+10; end; end; ai:=ai-bi ai:=ai-bi; end; end; while ak while ak=0 do k:=k-1;=0 do k:=k-1; if fh=- then write(fh i

18、f fh=- then write(fh);); for i:=k downto 1 do write(ai for i:=k downto 1 do write(ai);); writeln writeln; ;END.END.a=a-bvar a,b:array1.240 of integer; s1,s2:string; procedure sub(x,y:string); var la,lb,k:integer; i:integer; begin la:=length(x); lb:=length(y); fillchar(a,sizeof(a),0); fillchar(b,sizeof(b),0); for i:=1 to la do ai:=ord(xla-i+1)-48; for i:=1 to lb do bi:=ord(ylb-i

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論