洛谷1303 A*B Problem
本题地址: http://www.luogu.org/problem/show?pid=1303
题目描述
求两数的积。
输入输出格式
输入格式:
两个数
输出格式:
积
输入输出样例
输入样例#1:
1 2
输出样例#1:
2
说明
需用高精
题解
高精度
像高精度加减法运算一样,模拟乘法竖式运算。我们依然采取先计算后进位的策略。
1.输入与存储同加法运算。
2.结果的最大位数是两个因数的位数之和。
3.按照乘法竖式运算进行计算与进位。
4.输出之前处理最高位的进位,最高位的进位可能不止一位。
下面附上代码。
代码
- var
- st1,st2:ansistring;
- i,j:longint;
- x,lena,lenb,lenc:qword;
- a,b,c:array[0..10000] of qword;
- begin
- {读入}
- readln(st1);
- readln(st2);
- {预处理}
- lena:=length(st1);
- lenb:=length(st2);
- for i:=1 to lena do a[lena-i+1]:=ord(st1[i])-48;
- for i:=1 to lenb do b[lenb-i+1]:=ord(st2[i])-48;
- {1循环{重置进位} 2循环{{当前乘积+上次进位+原数}{处理进位并取模}} {进位}}
- for i:=1 to lena do begin
- x:=0;
- for j:=1 to lenb do begin
- c[i+j-1]:=a[i]*b[j]+x+c[i+j-1];
- x:=c[i+j-1] div 10;
- c[i+j-1]:=c[i+j-1] mod 10;
- end;
- c[i+j]:=x;
- end;
- {确定位数并删零}
- lenc:=lena+lenb;
- while (c[lenc]=0)and(lenc>1) do dec(lenc);
- {输出}
- for i:=lenc downto 1 do write(c[i]);
- end.
(本文系笔者原创,未经允许不得转载)