洛谷1303 A*B Problem 解题报告

it2026-08-05  16

洛谷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:=to lena do a[lena-i+1]:=ord(st1[i])-48;     for i:=to lenb do b[lenb-i+1]:=ord(st2[i])-48;    {1循环{重置进位} 2循环{{当前乘积+上次进位+原数}{处理进位并取模}} {进位}}     for i:=to lena do begin       x:=0;      for j:=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 do write(c[i]);    end.  

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

转载于:https://www.cnblogs.com/yzm10/p/4753403.html

最新回复(0)