二、 岛屿的缘分
提交文件: b.pas / b.exe
输入文件: b.in
输出文件: b.out
问题描述:
人和人的相识是一种缘分,其实人有幸到某地也是一种缘分。某风景优美的K小岛的缘分和其他景点的缘分来得不一般,K岛上有一个石碑刻上了两个很大很大的整数x和y,和一个正整数K,后面写道:“谁能准确的写出x和y的乘积中最右边的k位数(如果乘积不足K位则在左边用“0”补足K位),他就是和K小岛有缘分的人”,李先生到了K小岛,他马上叫他的秘书算一算,写出x和y的乘积中最右边的k位数,看看李先生和他的秘书是否和K小岛有缘分。现在也请你完成这个工作(注意: 如果乘积不足K位则在左边用“0”补足K位)。
数据输入:
从文件b.in读入数据,文件中共有三行,第一行是一个位数不大于120的正整数x,第二行是一个位数不大于120的正整数y,第三行是一个正整数K(1=<K<=250)。
数据输出:
结果输出到文件b.out中,只有一行,就是x和y的乘积中最右边的k位数。
输入输出样例1:
b.in
30
60
3
b.out
800
输入输出样例2:
b.in
12
13
5
b.out
00156
思路:
高精度乘法,推荐不要看我的,有点玄学
附dalao的高精度乘法模板加思路
https://blog.csdn.net/luojj26/article/details/49671121
var
s1,s2:string;
ans:array[0..1001,0..1001]of longint;
i,j,n,s,t,l1,l2,wait,gw,sw,swl:longint;
begin
readln(s1);
readln(s2);
l1:=length(s1);
l2:=length(s2);
read(s);
for i:=l1 downto 1 do
begin
t:=251-(l1-i);
for j:=l2 downto 1 do
begin
swl:=sw;
wait:=(ord(s1[i])-48)*(ord(s2[j])-48);
gw:=wait mod 10;
gw:=gw+swl;
sw:=wait div 10;
if gw>9 then
begin
sw:=sw+1;
gw:=gw mod 10;
end;
dec(t);
ans[i,t]:=gw;
end;
ans[i,t-1]:=sw;
swl:=0;
sw:=0;
end;
for i:=2 to l1 do
begin
for j:=250 downto t do
begin
swl:=sw;
wait:=ans[1,j]+ans[i,j];
gw:=wait mod 10;
sw:=wait div 10;
gw:=gw+swl;
if gw>9 then
begin
sw:=sw+1;
gw:=gw mod 10;
end;
ans[1,j]:=gw;
end;
end;
for i:=250-s+1 to 250 do
write(ans[1,i]);
end.