SP6 ARITH - Simple Arithmetics
题目描述
新的 WAP portal 的一部分也是一个用于计算超长数字表达式的计算器。为了让输出更美观,结果的格式与人工计算时通常使用的格式相同。
你的任务是编写这个计算器的核心部分。给定两个数字和所需的运算,你需要计算结果并按照下面指定的格式输出。对于加法和减法,将数字上下排列。乘法则稍微复杂一些:首先针对其中一个数的每一位计算一个部分结果,然后将这些部分结果相加。
输入格式
输入的第一行包含一个正整数 $T$(约等于 $1000$),表示随后要处理的表达式数目。每个表达式由一行组成,包含一个正整数、一个运算符($\texttt{+}$、$\texttt{-}$ 或 $\texttt{*}$)和第二个正整数。每个数字最多 $500$ 位。行内不包含空格。如果运算为减法,第二个数字总是小于第一个数字。所有数字均不以零开头。
输出格式
对于每个表达式,输出两行,写出两个给定的数字,第二个数字位于第一个数字下方,且最低位(代表各位数)必须在同一列对齐。将运算符紧贴放在第二个数字首位数字的前面。在第二个数字之后,必须画一条由连字符($\texttt{-}$)组成的水平线。
对于每次加法或减法运算,将计算结果写在水平线正下方,且结果的最低位与两个操作数的最低位对齐。
对于每次乘法运算,将第一个数字分别与第二个数字的每一位相乘。将各部分积依次排列,每行一个,首先写出与第二个数字最低位相乘得到的部分积,然后依次写出其他位的部分积。每个部分积必须与对应的乘数位对齐:即部分积的最低位与第二个数字相应位在同一列。任何部分积前不得添加额外的零;如果某一位为零,则该部分积仅写一个零。如果第二个数字多于一位,则在所有部分积下方再画一条水平线,然后写出这些部分积的和。
满足上述各项约束的前提下,各行行首的空格应尽量最少。水平线的起始列应与其上下两行(包括运算符)中最左边的数字或符号对齐,结束列应与这两行中最右边的数字对齐。水平线的长度应恰到好处,既不能过长,也不能过短。
每个测试用例处理完后(包括最后一个),都要输出一个空行。
说明/提示
**警告: 大量的输入 / 输出数据,在某些语言中请小心。**