码迷,mamicode.com
首页 > 其他好文 > 详细

高精乘

时间:2015-11-02 21:15:30      阅读:183      评论:0      收藏:0      [点我收藏+]

标签:

高精度练习之乘法

【题目描述】给出两个正整数A和B,计算A*B的值。保证A和B的位数不超过500位。

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

【输出描述】输出A*B的值

【样例输入】3 12

【样例输出】36

【数据范围】两个正整数的位数不超过500位

思路:就是高精乘高精

program aa;
var l1,l2,lm,i:longint;
    a,b:array[1..500]of integer;
    c:array[1..1000]of longint;
procedure init;
var ch:char;
    a1,b1:array[1..500]of longint;
    c,i:longint;
    s:ansistring;
begin
    while 1<>0 do
    begin
        read(ch);
        if ch=  then break;
        inc(l1);
        val(ch,a1[l1],c);
    end;
    repeat
        read(ch);
    until ch<> ;
    val(ch,b1[1],c);
    readln(s);
    l2:=length(s)+1;
    for i:=2 to l2 do val(s[i-1],b1[i],c);

    for i:=1 to l1 do a[i]:=a1[l1+1-i];
    for i:=1 to l2 do b[i]:=b1[l2+1-i];
end;
procedure work;
var i,j,l:longint;
begin
    for i:=1 to l1 do
        for j:=1 to l2 do
        begin
            l:=a[i]*b[j];
            c[i+j-1]:=c[i+j-1]+l;
            inc(c[i+j],c[i+j-1] div 10);
            c[i+j-1]:=c[i+j-1] mod 10;
        end;
    lm:=l1+l2-1;
    if c[l1+l2]<>0 then inc(lm);
    while c[lm]>=10 do
    begin
        inc(lm);
        c[lm]:=c[lm]+c[lm-1]div 10;
        c[lm-1]:=c[lm-1]mod 10;
    end;
end;
begin
    l1:=0;
    l2:=0;
    init;
    work;
    for i:=lm downto 1 do write(c[i]);
    writeln;
end.

 一点反思:第一次交的时候,红字部分出错。直接写成了c[i+j-1]:=l。。。

高精乘

标签:

原文地址:http://www.cnblogs.com/liuxinyu/p/4931223.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!