加法1:(考虑有效位)jzOJ实测48ms
const Max=250; type hint=array[0..Max] of longint; var a,b:hint; sa,sb:string; i:longint; begin readln(sa); readln(sb); a[Max]:=length(sa); b[Max]:=length(sb); for i:=1 to a[Max] do a[a[Max]-i]:=ord(sa[i])-48; for i:=1 to b[Max] do b[b[Max]-i]:=ord(sb[i])-48; if b[Max]>a[Max] then a[Max]:=b[Max]; dec(a[max]); for i:=0 to a[Max] do begin inc(a[i],b[i]); inc(a[i+1],ord(a[i]>9)); a[i]:=a[i] mod 10; end; if a[a[Max]+1]<>0 then inc(a[max]); for i:=a[max] downto 0 do write(a[i]); writeln; end.
加法2:(不考虑有效位)实测0ms
var a,b:array[1..250] of longint; sa,sb:string; i,j,la,lb:longint; begin readln(sa); readln(sb); la:=length(sa); lb:=length(sb); for i:=1 to la do a[i]:=ord(sa[la+1-i])-48; for i:=1 to lb do b[i]:=ord(sb[lb+1-i])-48; for i:=1 to 249 do begin a[i+1]:=a[i+1]+(a[i]+b[i]) div 10; a[i]:=(a[i]+b[i]) mod 10; end; for i:=250 downto 1 do if a[i]<>0 then break; for j:=i downto 1 do write(a[j]); writeln; end.
实测8ms
var a,b:array[0..250] of longint; sa,sb:string; i,j,la,lb:longint; begin readln(sa); readln(sb); la:=length(sa); lb:=length(sb); for i:=1 to la do a[la-i]:=ord(sa[i])-48; for i:=1 to lb do b[lb-i]:=ord(sb[i])-48; for i:=0 to 249 do begin a[i+1]:=a[i+1]+(a[i]+b[i]) div 10; a[i]:=(a[i]+b[i]) mod 10; end; for i:=250 downto 0 do if a[i]<>0 then break; for j:=i downto 0 do write(a[j]); writeln; end.
减法
var a,b:array[0..1010] of longint; sa,sb,st:string; i,j,la,lb,t:longint; begin readln(sa); readln(sb); if(sa=sb) then begin writeln(0); halt; end; la:=length(sa); lb:=length(sb); if(la<lb)or(la=lb)and(sa<sb) then begin write('-'); st:=sa; sa:=sb; sb:=st; t:=la; la:=lb; lb:=t; end; for i:=1 to la do a[la-i]:=ord(sa[i])-48; for i:=1 to lb do b[lb-i]:=ord(sb[i])-48; for i:=0 to 1009 do begin a[i+1]:=a[i+1]-ord(a[i]<b[i]); a[i]:=(10+a[i]-b[i]) mod 10; end; for i:=1010 downto 0 do if a[i]<>0 then break; for j:=i downto 0 do write(a[j]); writeln; end.
转载于:https://www.cnblogs.com/qilinart/articles/3617098.html