洛谷1303 A*B Problem 解题报告

洛谷1303 A*B Problem

本题地址: http://www.luogu.org/problem/show?pid=1303

题目描述

求两数的积。

输入输出格式

输入格式:

两个数

输出格式:

输入输出样例

输入样例#1:

1 
2

输出样例#1:

2

说明

需用高精

题解

高精度

像高精度加减法运算一样,模拟乘法竖式运算。我们依然采取先计算后进位的策略。

1.输入与存储同加法运算。

2.结果的最大位数是两个因数的位数之和。

3.按照乘法竖式运算进行计算与进位。

4.输出之前处理最高位的进位,最高位的进位可能不止一位。

下面附上代码。

代码

  1. var    
  2.  st1,st2:ansistring;    
  3.  i,j:longint;    
  4.  x,lena,lenb,lenc:qword;    
  5.  a,b,c:array[0..10000] of qword;    
  6.     
  7. begin     
  8. {读入}    
  9.  readln(st1);    
  10.  readln(st2);    
  11. {预处理}     
  12.  lena:=length(st1);    
  13.  lenb:=length(st2);    
  14.  for i:=to lena do a[lena-i+1]:=ord(st1[i])-48;    
  15.  for i:=to lenb do b[lenb-i+1]:=ord(st2[i])-48;    
  16. {1循环{重置进位} 2循环{{当前乘积+上次进位+原数}{处理进位并取模}} {进位}}    
  17.  for i:=to lena do begin     
  18.   x:=0;    
  19.   for j:=to lenb do begin     
  20.    c[i+j-1]:=a[i]*b[j]+x+c[i+j-1];    
  21.    x:=c[i+j-1] div 10;    
  22.    c[i+j-1]:=c[i+j-1] mod 10;    
  23.   end;    
  24.   c[i+j]:=x;    
  25.  end;    
  26. {确定位数并删零}    
  27.  lenc:=lena+lenb;    
  28.  while (c[lenc]=0)and(lenc>1) do dec(lenc);    
  29. {输出}    
  30.  for i:=lenc downto do write(c[i]);    
  31. end.  

(本文系笔者原创,未经允许不得转载)

原文地址:https://www.cnblogs.com/yzm10/p/4753403.html