python 验证Kaprekar变换数

Kaprekar变换数

        印度德伏拉利(Devlali)数学家D.R.Kaprekar设计了一个被称为Kaprekar变换的操作。首先选择一个四位不全相同的整数(即不是1111,2222,...),然后重新安排每一位上的数字得到一个最大数和最小数。接着,用最大的数减去最小的数从而获得一个新的数,重复以上操作以不断得到新的数,最后必然得到6174,本文用python来验证这个规律。

验证思路

  1. 判断所输入的数是否符合四位不全相同整数
  2. 将所输入的四位整数,并按位数比较大小,分出最大值,较大值,较小值,最小值
  3. 将其排列组合出最大的四位数和最小的四位数,并将其相减,若差不等于6174,则将所得值重复2.3步骤,若差等于6174,则退出循环语句,完成验证。

完整代码

#判断所输入的数是否符合四位不全相同整数
while 1:
    a = input("请输入一个四位不全相同的整数:")
    if len(a)!= 4:
        print("该整数不是四位数,请重新输入!")
    elif a[0]==a[1]==a[2]==a[3]:
        print("该整数是四位全相同的整数,请重新输入!")
    else:
        break


a = int(a)

i = 0
l = []
cha = 0

b = a%1000                              #求出百十个位
max4 = (a - b)/1000                     #求出千位
d = b%100                               #求出十个位
max3 = (b - d)/100                      #求出百位
max1 = d%10                             #求出个位
max2 = (d - max1)/10                    #求出十位
l.append(max4)
l.append(max3)
l.append(max2)
l.append(max1)
l.sort()
max1 = int(l[0])                          #最小值
max2 = int(l[1])
max3 = int(l[2])
max4 = int(l[3])                          #最大值

while cha != 6174 :
    i = i + 1
    summax = max4 * 1000 + max3 * 100 + max2 * 10 + max1
    summin = max1 * 1000 + max2 * 100 + max3 * 10 + max4
    cha = summax - summin
    baishige = cha%1000                  #求出百十个位
    max4 = (cha - baishige)/1000         #求出千位
    shige = baishige%100                 #求出十个位
    max3 = (baishige - shige)/100        #求出百位
    max1 = shige%10                      #求出个位
    max2 = (shige - max1)/10             #求出十位

    l = []                                                                                        #这个地方要把列表清零,当时没注意,在这调试了很长时间
    l.append(max4)
    l.append(max3)
    l.append(max2)
    l.append(max1)
    l.sort()
    max1 = int(l[0])            #最小值
    max2 = int(l[1])
    max3 = int(l[2])
    max4 = int(l[3])            #最大值

    print("第",i,"次运算")
    print(summax,"-",summin,"=",cha)

运行结果

  • 15
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值