高精度练习之乘法
【题目描述】给出两个正整数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。。。
时间: 2024-10-26 04:35:08