Description
人和人的相识是一种缘分,其实人有幸到某地也是一种缘分。某风景优美的K小岛的缘分和其他景点的缘分来得不一般,K岛上有一个石碑刻上了两个很大很大的整数x和y,和一个正整数K,后面写道:“谁能准确的写出x和y的乘积中最右边的k位数(如果乘积不足K位则在左边用“0”补足K位),他就是和K小岛有缘分的人”,李先生到了K小岛,他马上叫他的秘书算一算,写出x和y的乘积中最右边的k位数,看看李先生和他的秘书是否和K小岛有缘分。现在也请你完成这个工作(注意: 如果乘积不足K位则在左边用“0”补足K位)。
Input
从文件b.in读入数据,文件中共有三行,第一行是一个位数不大于120的正整数x,第二行是一个位数不大于120的正整数y,第三行是一个正整数K(1=< K <=250)。
Output
结果输出到文件b.out中,只有一行,就是x和y的乘积中最右边的k位数。
Sample Input
输入输出样例1:
b.in
30
60
3
输入输出样例2:
b.in
12
13
5
Sample Output
输入输出样例1:
b.out
800
输入输出样例2:
b.out
00156
Source
elba
题解:
本题就是个高精度乘法,最后取余时用第k位来取就行了(因为字符串的数字是倒着放的,所以当高精度数不足k位是就是0)
var
a,b,c:array[0..256]of longint;
s1,s2,s3:string;
k,len1,len2,len3,i,j,g,z:longint;
begin
read(s1);
readln;
read(s2);
read(k);
len1:=length(s1);
len2:=length(s2);
len3:=len1+len2;
for i:=1 to len1 do val(s1[i],a[len1-i+1]);
for i:=1 to len2 do val(s2[i],b[len2-i+1]);
for i:=1 to len1 do
for j:=1 to len2 do
c[i+j-1]:=c[i+j-1]+a[i]*b[j];//先乘
for i:=1 to len3 do//再进位
begin
c[i+1]:=c[i+1]+c[i] div 10;
c[i]:=c[i] mod 10;
end;
for i:=k downto 1 do write(c[i]);//输出
end.