题目描述: 给你两个整数a和b(0 < a,b < 1000),按笔算的格式输出a乘以b(a是被乘数,b是乘数)的运算过程,
最后再输出一行 “********”(二十个星号)。
乘号用小写字母“x”表示,每行末尾不能有多余的空格。具体输出格式见下面的例子:
例1:
a=89, b=13,则输出:
1
2
3
4
5
6
7
8
89
x 13
--------
267
89
--------
1157
********************
例2:
a=2, b=2,则输出:
1
2
3
4
5
2
x 2
--------
4
********************
示例: 输入: a = 89
b = 13 输出:
1
2
3
4
5
6
7
8
89
x 13
--------
267
89
--------
1157
********************
分析: 讲真,看到这个文字的排版,这个题目我是直接放弃思考的。直觉告诉我就是一个格式控制,什么地方放多少空格之类的,不难。
但是这个排版,真的放弃了。随后我就看了别人的题解。
代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
n = m = 8 # n为每一行显示的字符总长度,m为进位后的一行总长度
y = b
print('%*d' % (n, a)) # 打印a,行的总长度为n
print('x%*d' % (n - 1, b)) # 打印x, 再打印b,b的总长度为n - 1
if y > 9: # 乘数为两位数时,需要输出过程
print('-' * n)
while y > 0:
t, y = y % 10, y // 10
print('%*d' % (m, t * a))
m -= 1 # m - 1后,作为下一行的总长度
print('-' * n)
print('%*d' % (n, a * b))
print('*' * 20)