永发信息网

Free pascal高精度除法

答案:3  悬赏:50  手机版
解决时间 2021-02-03 10:23
天梯 wikioi3118 高精度练习之除法

题目描述 Description
给出两个正整数A和B,计算A/B整数部分的值。保证A和B的位数不超过500位。

输入描述 Input Description
读入两个用空格隔开的正整数

输出描述 Output Description
输出A/B整数部分的值

样例输入 Sample Input
15 5
样例输出 Sample Output
3
求代码,不要从文本里读取,是直接输入
最佳答案
type hp=array[-1..1000] of longint;

var

  a,b,c,d:hp;

  l1,l2,l3,i,code:longint;

  n1,n2:string;

procedure init(var a:hp);

var

  s:string;

  i:longint;

begin

  fillchar(a,sizeof(a),0);

  readln(s);

  a[0]:=length(s);

  for i:=1 to a[0] do

    a[i]:=ord(s[a[0]+1-i])-48;

end;

procedure print(a:hp);

var

  i:longint;

begin

  for i:=a[0] downto 1 do

    write(a[i]);

  writeln;

end;

procedure clear(var a:hp);

var

  i:longint;

begin

  for i:=1 to a[0] do

    begin

      inc(a[i+1],a[i] div 10);

      a[i]:=a[i] mod 10;

    end;

  while (a[a[0]]=0) and (a[0]>1) do dec(a[0]);

end;

function compare(a,b:hp):longint;

var

  i:longint;

begin

  clear(a);

  clear(b);

  if a[0]>b[0] then begin compare:=1; exit; end;

  if a[0]
  for i:=a[0] downto 1 do

    begin

      if a[i]>b[i] then begin compare:=1; exit; end;

      if a[i]
    end;

  compare:=0;

end;

procedure plus(a,b:hp;var c:hp);

var

  i:longint;

begin

  c:=a;

  if b[0]>c[0] then c[0]:=b[0];

  for i:=1 to b[0] do

    inc(c[i],b[i]);

  inc(c[0]);

  clear(c);

end;

procedure minus(a,b:hp;var c:hp);

var

  i:longint;

begin

  if compare(a,b)<0 then

   begin

    c:=b;

    b:=a;

   end

   else

    c:=a;

  for i:=1 to c[0] do

    begin

      dec(c[i+1]);

      inc(c[i],10-b[i]);

    end;

  clear(c);

end;

procedure multiply(a,b:hp;var c:hp);

var

  i,j:longint;

begin

  fillchar(c,sizeof(c),0);

  for i:=1 to a[0] do

  for j:=1 to b[0] do

    inc(c[i+j-1],a[i]*b[j]);

  c[0]:=a[0]+b[0];

  clear(c);

end;

procedure divide(a,b:hp;var c,d:hp);

var

  i,j,p:longint;

begin

  fillchar(c,sizeof(c),0);

  fillchar(d,sizeof(d),0);

  c[0]:=a[0]; d[0]:=1;

  for j:=a[0] downto 1 do

    begin

      inc(d[0]);

      for p:=d[0] downto 2 do

        d[p]:=d[p-1];

      d[1]:=a[j];

      while compare(d,b)>=0 do

        begin

          inc(c[j]);

          minus(d,b,d);

        end;

    end;

  clear(c);clear(d);

end;

begin

  init(a);

  init(b);

  plus(a,b,c);

  print(c);

  minus(a,b,c);

  print(c);

  multiply(a,b,c);

  print(c);

  divide(a,b,c,d);

  print(c);

  print(d);

end.这里边包含了加减乘除模等高精度运算,lz稍加整理可作为模板使用
另:建议lz还是用C/C++,
我有C++版高精度+压位+重载运算符的完整模板,lz需要的话我可以发一份
全部回答
vdvvvvvvvvvvv
procedure highdevide(a,b:hp; var c,d:hp); //高精度除法 高精度/高精度 var i,len:integer; begin fillchar(c,sizeof(c),0); fillchar(d,sizeof(d),0); len:=a[0];d[0]:=1; for i:=len downto 1 do begin multiply(d,10,d); d[1]:=a[i]; while(compare(d,b)>=0) do {即d>=b} begin Subtract(d,b,d); inc(c[i]); end; end; while(len>1)and(c.s[len]=0) do dec(len); c.len:=len; end; hp为数组定义 type hp:array[1..max] of integer; a[0],b[0],c[0],d[0]为数组的长度 再在主程序里打出来 如:for i:=x[0] downto 1 do write(x[i]); write('.'); for i:=1 to y[0] do w...procedure highdevide(a,b:hp; var c,d:hp); //高精度除法 高精度/高精度 var i,len:integer; begin fillchar(c,sizeof(c),0); fillchar(d,sizeof(d),0); len:=a[0];d[0]:=1; for i:=len downto 1 do begin multiply(d,10,d); d[1]:=a[i]; while(compare(d,b)>=0) do {即d>=b} begin Subtract(d,b,d); inc(c[i]); end; end; while(len>1)and(c.s[len]=0) do dec(len); c.len:=len; end; hp为数组定义 type hp:array[1..max] of integer; a[0],b[0],c[0],d[0]为数组的长度 再在主程序里打出来 如:for i:=x[0] downto 1 do write(x[i]); write('.'); for i:=1 to y[0] do write(y[i]); writeln;
我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
杨千忆董事长的家庭背景如何?为什么他可以这
福乐食阁久光店怎么去啊,有知道地址的么
农村信用社atm(松山镇民族高级中学东)地址在
洗泽的意思是什么啊?知道的请说下!
天乐药房兴盛店在什么地方啊,我要过去处理事
“心如鞋边两边白,人如黑裤永远黑”是什么意
单选题300700400吨读作A.三亿七十万零四百B.
刚才在美团上看到一家西餐自助上写“限量销售
中国银行四个字是蔡延恺还是孙中山题写的
农村信用社atm(板当镇309省道农村信用社板当
大宝干鲜果品地址在哪,我要去那里办事
起翦的意思是什么啊?知道的请说下!
为什么不把汽车的车轮设计得可以90°旋转,那
鸿运庆典马庄分店这个地址在什么地方,我要处
什么是环境要素?环境要素有哪些特点
推荐资讯
峨冕的意思是什么啊?知道的请说下!
怀砖的意思是什么啊?知道的请说下!
结婚证在哪里办都可以吗
您好,请问怎样把监控录像中的人物看清晰些
把2.5的小数点向右移动一位,所得数比原数大
印度语 我长得好丑,真的好丑,想哭,怎么办 怎
我的作文竟得了一等奖,真是什么?
求大连回沧州的路线??
奔离的意思是什么啊?知道的请说下!
猫猫洞地址有知道的么?有点事想过去
弟兄多如何巧妙的要彩礼钱
Are these keys on bed? 这句话、哪里错了?
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?