複習高精度玩,寫了個非常直觀的加減乘程式.
1uses math;
2var
3a,b:ansistring;
4dc,la,lb:longint;
5 c:array[-2555555..2555555] of
longint;
6procedure plus(a,b:ansistring);
7var
8tt,i:longint;
9begin
10if la>lb then
11begin
12 for i:=1
to la-lb do
13 b:='
0'+b;
14 lb:=la;
15end
16else
17begin
18 for i:=1
to lb-la do
19 a:='
0'+a;
20 la:=lb;
21end;
22 for i:=1
to la do
23 c[i]:=ord(a[i])+ord(b[i])-96
;24 for i:=la downto 1
do25
if (c[i]+dc)>=10
then
26begin
27 tt:=(c[i]+dc) mod 10
;28 dc:=(c[i]+dc) div 10
;29 c[i]:=tt;
30end
31else
32begin
33 c[i]:=c[i]+dc;
34 dc:=0;35
end;
36 c[0]:=-1;37
if dc>0 then c[0]:=dc;
38 for i:=0
to la do
39if c[i]<>-1
then write(c[i]);
40writeln;
41end;
42procedure minus(a,b:ansistring);
43var
44t:ansistring;
45tt,i:longint;
46begin
47if la>=lb then
48begin
49 for i:=1
to la-lb do
50 b:='
0'+b;
51 lb:=la;
52end
53else
54begin
55 for i:=1
to lb-la do
56 a:='
0'+a;
57 la:=lb;
58 write('-'
);59 t:=a;
60 a:=b;
61 b:=t;
62end;
63 for i:=1
to la do
64 c[i]:=ord(a[i])-ord(b[i]);
65 for i:=la downto 1
do66
if (c[i])<0
then
67begin
68 c[i]:=c[i]+10
;69 c[i-1]:=c[i-1]-1;70
end;
71 lb:=1
;72 while (c[lb]=0) and (lbdo
inc(lb);
73 for i:=lb to la do
74if c[i]<>-1
then write(c[i]);
75writeln;
76end;
77procedure multiply(a,b:ansistring);
78var
79tt,xx,i,j:longint;
80begin
81 xx:=0; tt:=maxlongint;
82 for i:=la downto 1
do83 for j:=lb downto 1
do84
begin
85 c[i+j-1]:=((ord(a[i])-48)*(ord(b[j])-48)+c[i+j-1
]);86 tt:=min(tt,i+j-1
);87 xx:=max(xx,i+j-1
);88
end;
89 while c[tt]=0
do inc(tt);
90 dc:=0
;91 for i:=xx downto tt do
92begin
93if c[i]+dc>=10
then
94begin
95 lb:=c[i];
96 c[i]:=(c[i]+dc) mod 10
;97 dc:=(lb+dc) div 10;98
end99 else //17956
100begin
101 c[i]:=c[i]+dc;
102 dc:=0
;103
end;
104end;
105if dc>0
then write(dc);
106 for i:=tt to xx do
write(c[i]); writeln;
107end;
108begin
109while true do
110begin
111 writeln('
高精度數字計算器 ver 0.9 done by catch-22.s.in');
112 writeln('
本計算器暫時只支援加減乘三則運算,其他運算更新中...');
113 writeln('
請不要拿無聊的超多位數來bs本程式,謝謝合作.');
114 writeln('
請輸入要計算的兩個高精度數字:');
115 write('
請輸入第乙個數字,並換行:');
116readln(a);
117 write('
請輸入第二個數字,並換行:');
118readln(b);
119 la:=length(a);
120 lb:=length(b);
121 writeln('
計算中..');
122 fillchar(c,sizeof(c),0); dc:=0
;123 write(a,'
+',b,'='
);124
plus(a,b);
125 fillchar(c,sizeof(c),0); dc:=0
;126 write(a,'
-',b,'='
);127
minus(a,b);
128 fillchar(c,sizeof(c),0); dc:=0
;129 write(a,'
*',b,'='
);130
multiply(a,b);
131 writeln('
謝謝使用,如需繼續計算請輸入11,如不需要請輸入任意字元');
132readln(a);
133if a<>'11'
then
134begin
135 writeln('
thank you.');
136 for la:=1
to maxlongint shr 4
do lb:=1
;137
exit;
138end;
139end;
140 end.
exe: ,歡迎使用.
高精度加減乘法運算
高精度,就是利用陣列存放數字,每個元素存放乙個數字,這樣就可以實現對一些較大的數字進行運算 加法 進製 include include include using namespace std intmain c lenc x if c lenc 0 lenc 處理最高進製 for i lenc i ...
高精度加減乘法小程式 Ver 0 9 5 beta
第一版見 ver 0.9.5 beta 本版修正了乘積為0時無輸出的bug 感謝luogu.org的資料 1 uses math 2var 3a,b ansistring 4dc,la,lb longint 5 c array 2555555.2555555 of longint 6procedur...
高精度減法,高精度乘法
高精度減法 oj資料偏弱如果新增乙個101 2就錯了,下面這一步是為了防止錯誤的 if a aa 0 可能出現第一位的1被借走的的情況,所以加乙個while找第乙個不是0的 while c i 0 i include include include include include include u...