问题6426--[数值问题]高精度乘以高精度

6426: [数值问题]高精度乘以高精度

[命题人 : ]
时间限制 : 1.000 sec  内存限制 : 128 MiB

题目描述

【问题描述】 
输入两个高精度正整数a和b(a,b位数<=200),求两数的乘积。
【输入格式】highmul.in 输入共两行,分别为a和b。
【输出格式】highmul.out
输出共一行,表示两个数的积。
【输入样例1】 
1234567890
1234567890
【输出样例1】
1524157875019052100



样例输入 复制


样例输出 复制


提示

Const
    SIZE = 400;
Type
    hugeint = Record
        len : Integer;
        num : Array[1..SIZE] Of integer;
    End;
var a,b:hugeint;
    s1,s2:string;
    i:integer;
procedure times(a, b : hugeint);
    Var
        i, j : Integer;
        ans : hugeint;
    Begin
        FillChar(ans, SizeOf(ans), 0);
        For i := 1 To a.len Do
            For j := 1 To b.len Do
              ans.num[i + j - 1] := ans.num[i + j - 1] + a.num[i] * b.num[j];
        For i := 1 To a.len + b.len Do
            Begin
                ans.num[i + 1] := ans.num[i + 1] + ans.num[i] DIV 10;
                    ans.num[i] := ans.num[i] mod 10;
                If ans.num[a.len + b.len] > 0
                    Then ans.len := a.len + b.len
                    Else ans.len := a.len + b.len - 1;
            End;
      for i:=ans.len downto 1 do write(ans.num[i]);
      writeln;
    End;
 procedure datain;
   begin
    assign(input,'highmul.in');  assign(output,'highmul.out');
    reset(input); rewrite(output);
    readln(s1);
    readln(s2);
    a.len:=length(s1);
    b.len:=length(s2);
    for i:=1 to a.len do  a.num[i]:=ord(s1[a.len-i+1])-ord('0');
    for i:=1 to b.len do  b.num[i]:=ord(s2[b.len-i+1])-ord('0');

 end;
 begin
   datain;
   times(a,b);
   close(input);
   close(output);
 end.

来源/分类