题目大意
给一个4位正整数,现在将这个正整数中的每一位数字从大到小排列和从小到大排列成两个新的4位数,然后用排列后的大数减小数会得到一个新的数,再将这个数进行以上操作直到最后的数不变为止。
输入
每组包含一个测试用例,每个测试用例是一个正整数 N N N范围在 ( 0 , 1 0 4 ) (0, 10^4) (0,104)
输出
对每个测试用例按照题意输出操作的过程,格式为
bigNum - smallNum = result
所有的数字在输出时都要被输出成4位数
样例输入
6767
2222
样例输出
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
2222 - 2222 = 0000
解析
按照题意不断地去减即可。
但是我写的python会在某个测试点出错,然后看大佬的使用正则表达式过了。。。
参考:传送门
我的出错的python:
# -*- coding: utf-8 -*-
# @Time : 2019/6/28 13:13
# @Author : ValarMorghulis
# @File : 1069.py
def solve():
n = int(input())
while n and n != 6174:
n = "%04d" % n
n = list(map(int, list(n)))
n.sort()
small = n[0] * 1000 + n[1] * 100 + n[2] * 10 + n[3]
big = n[3] * 1000 + n[2] * 100 + n[1] * 10 + n[0]
n = big - small
print("%04d - %04d = %04d" % (big, small, n))
if __name__ == "__main__":
solve()
大佬的ACpython:
def main():
num = input()
while(True):
num = '{:0>4}'.format(num)
first = '{:0>4}'.format(''.join(sorted(num)[::-1]))
second = '{:0>4}'.format(first[::-1])
result = '{:0>4}'.format(int(first)-int(second))
print(first, '-', second, '=', result)
if result == '6174' or result == '0000' :
break
else:
num = result
if __name__ =="__main__":
main()