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

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 128 MB
高精度乘以高精度(highmul/c/cpp) 

【问题描述】 

输入两个高精度正整数a和b(a,b位数<=200),求两数的乘积。

【输入格式】highmul.in

<span>输入共两行,分别为a和b。</span> 

<span>【输出格式】highmul.out</span> 

<span>输出共一行,表示两个数的积。</span> 

<span>【输入样例1】&nbsp;</span><span><br />

1234567890
1234567890

<br />

<br />

<span style="line-height:21px;"></span> 

<span>【输出样例1】</span> 

1524157875019052100

<br />

<br />

题目输入

题目输出

输入/输出样例

输入格式


                        

输出格式


                        

提示

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.

<br />