1、和高精度加法相比,減法在差為負數時處理的細節更多一點:當被減數小於減數時,差為負數,差的絕對值是減數減去被減數;在程式實現上用一個變數來存儲符號位,用另一個數組存差的絕對值。
2、算法流程:
(1)讀入被減數S1,S2(字元串);
(2)置符號位:判斷被減數是否大於減數:大則將符號位置為空;小則將符號位置為“-”,交換減數與被減數;
(3)被減數與減數處理成數值,放在數組中;
(4)運算:
A、取數;
B、判斷是否需要借位;
C、減,將運算結果放到差數組相應位中;
D、判斷是否運算完成:是,轉5;不是,轉A;
(5)列印結果:符號位,第1位,循環處理第2到最後一位;
3、細節:
▲如何判斷被減數與減數的大小:字元串知識
①(1)首先將兩個字元串的位數補成一樣(因為字元串的比較是從左邊對齊的;兩個字元串一樣長才能真正地比較出大小):短的在左邊補0
k1:=length(s1);
k2:=length(s2);
if k1>k2 then for i:=1 to k1-k2 do s2:='0'+s2
else for i:=1 to k2-k1 do s1:='0'+s1;
(2)接著比較大小:直接比較字元串大小
fh:='';
if s1<s2 then begin fh:='-';s:=s1; s1:=s2; s2:=s; end;
{————s1存被減數,符號存符號}
②通過數組分析完成大小比較(當數值長度超過256位時發揮重要作用)
readln(s);{輸入整個算式,即'a+b='}
l1:=pos('-',s);(搜尋'-'的位置)
for i:=1 to l1-1 do {從字元串中分離出數值A}
a[l1-i]:=ord(s[i])-48;
dec(l1);{將'-'號位置轉換為數值A的長度}
x2:=length(s);{獲取算式長度}
l2:=x2-l1-2;{得到數值B長度}
for i:=l1+2 to x2 do{將數值B分離出}
b[x2-i]:=ord(s[i])-48;
if l2>l1 then p:=true{開始分析數值AB的大小,如果B位數高則B更大}
else if l2=l1 then{如果相等則進入詳細分析}
begin
i:=l1;
while (i>0)and(a[i]=b[i]) do dec(i);{從高到低依次檢索AB每位的大小,如果有非等於則退出}
if a[i]<b[i] then p:=true;{最終判斷數值AB的大小}
end;
▲將字元串處理成數值:
l:=length(s1);{求出s1的長度,也即s1的位數;有關字元串的知識。}
k1:=260;
for i:=l downto 1 do
begin
a[k1]:=ord(s1)-48;{將字元轉成數值}
k1:=k1-1;
end;
k1:=k1+1;
▲列印結果:
例:差:第一位是12,第二位是234,第三位是1234,最後一位:3。它的實際數值是12023412340003。
從上例可以看出:列印時,從第二位開始,因為每一段都代表4位,不足4位的要補足0。
write(fh,c[k]);{k是差的第1位;}
for i:=k+1 to 260 do
begin
if c<1000 then write('0');
if c<100 then write('0');
if c<10 then write('0');
write(c);
end;
程式原始碼:
{PASCAL}
Program a1;
var a,b,c:array [1..100] of integer;
x2,l1,l2,i:integer;
p:boolean;
s:string;
begin
readln(s);
l1:=pos('-',s);
for i:=1 to l1-1 do
a[l1-i]:=ord(s[i])-48;
dec(l1);
x2:=length(s);
l2:=x2-l1-2;
for i:=l1+2 to x2 do
b[x2-i]:=ord(s[i])-48;
if l2>l1 then p:=true
else if l2=l1 then
begin
i:=l1;
while (i>0)and(a[i]=b[i]) do dec(i);
if a[i]<b[i] then p:=true;
end;
if p then
begin
for i:=1 to l2 do c[i]:=b[i]-a[i];
for i:=1 to l2 do
if c[i]<0 then
begin
c[i]:=c[i]+10;
dec(c[i+1]);
end;
i:=l2;
while c[i]=0 do dec(i);
write('-');
for l2:=i downto 1 do write(c[i]);
writeln;
end
else
begin
for i:=1 to l1 do c[i]:=a[i]-b[i];
for i:=1 to l1 do
if c[i]<0 then
begin
c[i]:=c[i]+10;
dec(c[i+1]);
end;
i:=l1;
while c[i]=0 do dec(i);
for l1:=i downto 1 do write(c[i]);
writeln;
end;
end.
{水平不足之處請見諒}
相關詞條
-
高精度計算
高精度運算,是指參與運算的數(加數,減數,因子……)範圍大大超出了標準數據類型(整型,實型)能表示的範圍的運算。例如,求兩個200位的數的和。這時,就要...
定義 C++的優雅實現 -
HugeCalc
媲美! 現已提供了如下功能: ⊙ 高精度快速加法 ⊙ 高精度快速減法 ⊙ 高精度快速乘法 ⊙ 高精度快速除法 ⊙ 高精度... HugeCalc 是一款高精度算法庫(同時支持 MBCS...
-
數值計算與數據處理編程及實踐
的進制設定5.1.5數的輸入與輸出轉換5.2高精度加法和減法...的套用實例4.5本章小結思考題主要參考文獻第5章高精度計算程式設計5.1高精度數的基本表示方法5.1.1高精度數的儲存形式...
基本介紹 圖書目錄 -
電池容量計
,產生誤判。以高精度、低失調、低漂移設計完成後的樣機,滿度誤差為1mv...輸出,且4020是單向計數,無減法功能。此種設計有兩大優點:(1)4020...)當作加法時,4020可精確到最低位;作減法時,誤差為低十四位,但這個...
前言 基本原理 方案論證及技術關鍵的解決 產品的設計與計算 性能測試結果 -
磁鐵
發展1822年,法國物理學家阿拉戈和呂薩克發現,當電流通過其中有鐵塊的繞線時,它能使繞線中的鐵塊磁磁鐵化。這實際上是電磁鐵原理的...
發展 幾種分類 概念 討論 行業套用 -
HK1200C
高速度與高精度稱重要求的控制場合。HK-1200C能滿足大多數結構型式...、減法秤、分選秤功能,具備3 路外控輸入和3 路控制輸出; 2.... 高精度A/D 轉換,可讀性達1/30000; 5. 5 點非線性修正...
產品型號說明 HK1200C簡介 -
天地有大美:中國風光攝影藝術
了風光攝影的創作要素和藝術表現方法,講解了高精度的數碼影像和風光圖片...)構圖的均衡和穩定(四)攝影構圖要提倡用“減法”(五)運用線條增強畫面...抽象第四章 “中國風光”攝影的高精度數碼影像一、當今攝影已進入高精度數碼...
出版信息 內容簡介 編輯推薦 目錄 -
王立鼎
與高精度漸開線樣板工藝與測試技術研究王立鼎帶領高精度齒輪研究組穩定的製造DIN...自然科學三等獎,成型設備上製造的高精度漸開線樣板有兩種套用:一種樣板(凸輪... 項目名稱 獎勵名稱 1978年 高精度小模數標準齒輪 全國科學大會獎...
人物經歷 主要成就 社會任職 人物評價 -
高頻電路基礎
,其輸入失調電壓在2mV左右,開環增益一般大於80dB。2.高精度集成運算放大器高精度集成運算放大器是指那些失調電壓小,溫度漂移非常小,以及增益...高精度集成運算放大器的失調電壓可小到幾微伏,溫度漂移小到幾十微伏每攝氏度...
內容簡介 作者簡介 電力技術