|| 返回 || 本站首页 ||奥赛信息||计算机基础||pascal基础||数据结构||经典算法||试题汇编||校本教程||自主练习||

|| 经典算法 >> 高精度乘法

双击自动滚屏 

   

高精度乘法

{说明:用字符串来存放乘数,最大限制255位乘255位}

 

program jjzx;  {本程序只考虑整数相乘}
var
  s1,s2:string;
  a,b:array[1..255] of integer;
  c:array[1..510] of integer;  {数组C用来存放结果,最大510位,为什么?}
  i,j,l,m,k1,k2,x,y,z,w:integer;
begin
  writeln('input s1:');   readln(s1);
  writeln('input s2:');   readln(s2);
  l:=length(s1);    m:=length(s2);  {得到两个字符串的长度}
  k1:=0;   

  for i:=l downto 1 do  {S1转换过程,把低位放在A[1]中} 
     begin
         k1:=k1+1;
         a[k1]:=ord(s1[i])-48;       
     end;
  k2:=0;

  for i:=m downto 1 do   {S2转换过程,把低位放在B[1]中}
     begin
         k2:=k2+1;
         b[k2]:=ord(s2[i])-48 ;        
     end;

  for i:=1 to k1 do   {开始计算,从低位开始乘}
    for j:=1 to k2 do
       begin
         x:=a[i]*b[j];
         y:=x div 10;
         z:=x mod 10;
         w:=i+j-1;
         c[w]:=c[w]+z;
         c[w+1]:=c[w+1]+y+c[w] div 10;
         c[w]:=c[w]mod 10
       end;

  w:=k1+k2;
  if c[w]=0 then w:=w-1;  {判断最高位是否有数}
  writeln('相乘结果是 :');
  for i:=w downto 1 do write(c[i]);{输出的时候注意顺序}
  writeln
end.


 
 

 

 
 
 

制作与维护:重庆市忠县中学 谭海