python-自守数问题(赛氪OJ)

[题目描述]
自守数是指一个数的平方的尾数等于该数自身的自然数。
例如:
25^2=625
76^2=5776
9376^2=87909376
请求出 200000 以内的自守数?
输入格式:
此题无输入。
输出格式:
输出 200000 以内的自守数(包括 0, 数之间用两个空格分开)。
样例输入
样例输出
对于 100% 的数据,保证都符合题目要求。
提示说明:
若采用“求出一个数的平方后再截取最后相应位数”的方法显然是不可取的,因为计算机无法表示过大的整数。分析手工方式下整数平方(乘法)的计算过程,以 376为例:376 被乘数
X 376 乘数
2256 第一个部分积=被乘数乘数的倒数第一位
2632 第二个部分积=被乘数乘数的倒数第二位
1128 第三个部分积=被乘数*乘数的倒数第三位
141376 积
本问题所关心的是积的最后三位。分析产生积的后三位的过程,可以看出,在每一次的部分积中,并不是它的每一位都会对积的后三位产生影响。总结规律可以得到:在三位数乘法中,对积的后三位产生影响的部分积分别为:
第一个部分积中:被乘数最后三位乘数的倒数第一位
第二个部分积中:被乘数最后二位乘数的倒数第二位
第三个部分积中:被乘数最后一位*乘数的倒数第三位
将以上的部分积的后三位求和后截取后三位就是三位数乘积的后三位。这样的规律可以推广到同样问题的不同位数乘积。
按照手工计算的过程可以设计算法编写程序。
来源/分类(难度系数:一星)


完整代码展示:
# coding=utf-8
a=[]
for i in range(0,200001):
     num = i*i
     if num%10 ==i:
           a.append(i)
     elif num%100 ==i:
           a.append(i)
     elif num%1000==i:
           a.append(i)
     elif num%10000==i:
           a.append(i)
     elif num%100000==i:
           a.append(i)
     elif num%200000==i:
           a.append(i)
for i in range(0,len(a)):
      print(a[i],end=" ")


代码解释:
a=[] ”,建立一格空列表a,用于储存0~200000的自守数。
for i in range(0,200001):
       num = i*i
       if num%10 ==i:
             a.append(i)
       elif num%100 ==i:
             a.append(i)
       elif num%1000==i:
             a.append(i)
       elif num%10000==i:
            a.append(i)
       elif num%100000==i:
            a.append(i)
       elif num%200000==i:
            a.append(i)             
”,根据自守数的定义,依次遍历从0~20000的所有数值,查找符合条件的数值并将其添加进列表a中。
for i in range(0,len(a)):
       print(a[i],end=" ")     
”,依次打印列表a中的元素,每两个元素之间插入两个空格。


运行效果展示:

a57b9b3cffbc45e39253a0f2cac8d790.jpg

c97a2d87eda04bd2a3282a31cc704757.jpg 

            (声明:以上内容均为原创) 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

闪云-微星

感谢大家的支持与鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值