2009东莞特长生 Q2:岛屿的缘分

二、  岛屿的缘分
提交文件: 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,第三行是一个正整数K1=<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.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值