NOIP复习-003——高精

NUM.ONE——高精乘

var a,b,c:array[1..100]of longint;
    s,s1,s2:ansistring;
    i,j,k,l,m,n:longint;
begin
  readln(s1);
  readln(s2);
  if length(s1)<length(s2) then
    begin
      s:=s1;s1:=s2;s2:=s;
    end;
  n:=0;
  for i:=length(s1) downto 1 do
   begin
     inc(n);
     a[n]:=ord(s1[i])-ord('0');
   end;
  n:=0;
  for i:=length(s2) downto 1 do
   begin
    inc(n);
    b[n]:=ord(s2[i])-ord('0');
   end;
  fillchar(c,sizeof(c),0);
  for i:=1 to length(s2) do
    begin
      for j:=1 to length(s1) do
        begin
          c[i+j-1]:=c[i+j-1]+a[j]*b[i];
        end;
    end;
  n:=0;
  repeat
    inc(n);
    if c[n]>9 then
      begin
        k:=c[n] div 10;
        c[n]:=c[n] mod 10;
        c[n+1]:=c[n+1]+k;
      end;
    k:=0;
  until (n>length(s1)+length(s2));
  while c[n]=0 do
    dec(n);
  for i:=n downto 2 do
    write(c[i]);
  writeln(c[1]);
  end.

NUM.TWO——高精加

var a,b,c:array[1..100]of longint;
    i,j,k,l,m,n,t:longint;
    s1,s2,s:ansistring;
begin
  readln(s1);
  readln(s2);
  fillchar(c,sizeof(c),0);
  if length(s1)<length(s2) then
   begin
     s:=s1;
     s1:=s2;
     s2:=s;
   end;
  n:=0;
  for i:=length(s1) downto 1 do
   begin
    inc(n);
    a[n]:=ord(s1[i])-ord('0');
   end;
   n:=0;
  for i:=length(s2) downto 1 do
   begin
     inc(n);
    b[n]:=ord(s2[i])-ord('0');
   end;
  k:=0;
  for i:=1 to length(s1) do
    begin
      c[i]:=c[i]+a[i]+b[i];
      if c[i]>=10 then
        begin
          t:=c[i];
          c[i]:=t mod 10;
          k:=t div 10;
        end;
      c[i+1]:=k;
      k:=0;
    end;
  i:=length(s1)+1;
  while c[i]=0 do
    dec(i);
  for j:=i downto 2 do
    write(c[j]);
  writeln(c[1]);
end.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值