娄山中学noip吧 关注:137贴子:1,769
  • 6回复贴,共1

高精度加减乘除

只看楼主收藏回复

见下。


IP属地:上海1楼2012-05-24 18:15回复
    加法:var ta,tb:string; a,b,s:array[1..255] of byte; la,lb,l,i,c:byte;begin write('a=');readln(ta); la:=length(ta); for i:=1 to la do a[i]:=ord(ta[la+1-i])-48; write('b=');readln(tb); lb:=length(tb); for i:=1 to lb do b[i]:=ord(tb[lb+1-i])-48; if la>lb then l:=la else l:=lb; c:=0; for i:=1 to l+1 do begin s[i]:=a[i]+b[i]+c; if s[i]>9 then begin s[i]:=s[i]-10;c:=1; end else c:=0; end; write(ta,'+',tb,'='); for i:=l+1 downto 1 do if ((i=l+1) and (s[i]=0)) then write(' ') else write(s[i]); readln;end.


    IP属地:上海2楼2012-05-24 18:15
    回复
      2025-07-01 01:16:23
      广告
      减法。
      var ta,tb,tc:string; a,b:array[1..255] of byte; la,lb,lc,l,i:byte;begin write('a=');readln(ta); write('b=');readln(tb); write(ta,'-',tb,'='); la:=length(ta); lb:=length(tb); if ((la<lb) or ((la=lb) and (ta<tb))) then begin tc:=ta;ta:=tb;tb:=tc; lc:=la;la:=lb;lb:=lc; write('-'); end;
      for i:=1 to la do a[i]:=ord(ta[la+1-i])-48; for i:=1 to lb do b[i]:=ord(tb[lb+1-i])-48;
      for i:=1 to la do begin a[i]:=a[i]-b[i]; a[i+1]:=a[i+1]-ord(a[i]<0); a[i]:=a[i]+ord(a[i]<0)*10; end; while (a[la]=0) and (la>1) do la:=la-1; for i:=la downto 1 do write(a[la]); readln;end.
      


      IP属地:上海3楼2012-05-24 18:19
      回复
        乘法。
        var ta,tb:string; la,lb,ls,i,j,x,w:byte; a,b,s:array[1..255] of byte;begin readln(ta); readln(tb); la:=length(ta); lb:=length(tb); ls:=la+lb; for i:=1 to la do a[i]:=ord(ta[la+1-i])-48; for i:=1 to lb do b[i]:=ord(tb[lb+1-i])-48; for i:=1 to la do for j:=1 to lb do begin x:=a[i]*b[j];w:=i+j-1; s[w]:=s[w]+x; s[w+1]:=s[w+1]+s[w] div 10; s[w]:=s[w] mod 10; end; while (s[ls]=0) and (ls>1) do ls:=ls-1; write(ta,'*',tb,'='); for i:=ls downto 1 do write(s[i]); readln;end.


        IP属地:上海4楼2012-05-24 18:20
        回复
          除法。
          var q,p,jys,js,jxhj,p1,i:byte; ys,s:array[1..100] of byte;begin write('q=');readln(q); write('p=');readln(p); ys[1]:=q; jys:=1;js:=0; p1:=1; while (q<>0) and (p1=1) do begin js:=js+1; s[js]:=q*10 div p; q:=q*10-s[js]*p; if q<>0 then begin jxhj:=1; while (ys[jxhj]<>q) and (jxhj<jys) do jxhj:=jxhj+1; if ys[jxhj]=q then begin p1:=0; write('0.'); for i:=1 to jxhj-1 do write(s[i]); write('{'); for i:=jx***o js do write(s[i]); write('}'); end else begin jys:=jys+1;ys[jys]:=q; end; end else begin write('0.'); for i:=1 to js do write(s[i]); end; end; readln;end.


          IP属地:上海5楼2012-05-24 18:21
          回复
            小李,你的程序……能不能做下换行


            IP属地:上海6楼2012-05-25 08:30
            回复
              --凸


              IP属地:上海7楼2012-05-25 16:29
              回复