【PAT 乙】1019 数字黑洞

该博客介绍了如何通过Python编程演示4位正整数达到数字黑洞6174的过程。从给定的任意4位数开始,按照非递增和非递减排序进行相减,直到得到6174。文中提到了关键点,如补零、判断条件和Python中的format函数、zfill方法的应用。
摘要由CSDN通过智能技术生成

题目

给定任一个各位数字不完全相同的 4 位正整数,如果我们先把 4 个数字按非递增排序,再按非递减排序,然后用第 1 个数字减第 2 个数字,将得到一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的 6174,这个神奇的数字也叫 Kaprekar 常数。例如,我们从6767开始,将得到
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
… …
现给定任意 4 位正整数,请编写程序演示到达黑洞的过程。
输入格式:
输入给出一个 (0,1000​​ ) 区间内的正整数 N。
输出格式:
如果 N 的 4 位数字全相等,则在一行内输出 N - N = 0000;否则将计算的每一步在一行内输出,直到 6174 作为差出现,输出格式见样例。注意每个数字按 4 位数格式输出。
输入样例 1:
6767
输出样例 1:
7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
输入样例 2:
2222
输出样例 2:
2222 - 2222 = 0000

分析

需要注意的点有点多,一不小心就会掉进坑里。

  1. 判断输入是否是四位数,不足四位数的要补零到四位数
  2. 判断两数相减是不是小于四位数,如果小于四位数也要补零到四位数再进行下一步运算
  3. 如果四位数里有元素零,在进行重新排列的时候,零作为千位是不能省略的

程序(python)

n=list("{:0<4}".format(input()))
flag=True
while flag:
    n1=str().join(sorted(n))
    n2=n1[-1::-1]
    n="%04d"%(int(n2)-int(n1))
    print("%s - %s = %s"%(n2,n1,n))
    if n in ("0000","6174"):
        flag=False

知识点

1 format函数

1.1 用于填充

print("my name is {} and i am {} years old".format("sam","14"))
输出结果:my name is sam and i an 14 years old
print("my name is {1} and i am {0} years old".format("sam","14"))
输出结果:my name is 14 and i am sam years old

1.2 保留n为小数

print("{:.2f}".format(3.1415))#四舍五入保留两位小数
输出结果:3.14
print("{:+.2f}".format(3.1415))#四舍五入保留两位小数,保留正负号
输出结果:+3.14
print("{:+.2f}".format(-3.1415))#四舍五入保留两位小数,保留正负号
输出结果:-3.14

1.3 用于对齐和填充数字
长度不够时,用指定的元素填充
:< — 左对齐
:> — 右对齐
:^ — 中间对齐

print("{:0>4}".format("45"))#以指定的"0"元素来将输入字符串补充到指定的4位
print("{:0<4}".format("45"))
print("{:0^4}".format("45"))
输出结果:0045
         5400
         0450

1.4 不同格式输出

print("{:.2%}".format(0.25))
print("{:,}".format(1000000))
print("{:.2e}".format(1000000))
输出结果:25.00%
         1,000,000
         1.00e+06

2 zfill方法给数字补零

n=123
print(n.zfill(5))
输出结果:00123
n=-123
print(n.zfill(5))
输出结果:-0123

3 格式化的方法给数字补零

n=123
print("%05d"%n)
输出结果:00123
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值