数学

1.回文数(easy)

题目:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
示例 1:
输入: 121
输出: true

思路:
1.字符串+双指针:将整数转化为字符串,然后设置两个指针分别指向字符串的头部和尾部,依次比较,当遍历完则返回true,反正当指针所指的数字不相等时则直接返回False
2.数学的方法:将后半段的数字翻转看是否与前半段一致。
将一个数字%10得到末位数 m = x%10,将末位数加到取出数cur= cur * 10 +m 。
数字/ 10得到去掉末尾数剩下的数,当x<cur时,说明已经遍历一半了,此时判断x和cur是否相等(需要考虑奇偶性)
当具体操作如下图:在这里插入图片描述

1.   def isPalindrome(self, x: int) -> bool:
        s = str(x)
        l=0
        r=len(s)-1
        while l<r:
            if s[l] != s[r]:
                return False
            l+=1
            r-=1
        return True
2.  def isPalindrome(self, x: int) -> bool:
        if x <0 or (x%10==0 and x!=0) :
            return False
        cur = 0
        while x >cur:
            cur = cur * 10 + x % 10
            x = x//10
        return  cur == x or x == cur //10

2.求1+2+3+…+n

题目:
求1+2+3+…+n,要求不能使用乘除法、for、while、if、else、switch、case等关键字及条件判断语句(A?B:C)

思路:1)使用等差数列求和公式:n*(n-1)/2
2)使用递归【注意判断n>0时不能用if,可以用and】
代码都很简单

def Sum_Solution(self, n):
        # write code here
       1return  (n*(n+1)//2)
       2return n and (n+self.Sum_Solution(n-1))

3.自守数系列

1)判断是否为自守数

自守数是指一个正整数的平方的尾数等于该数自身的自然数
55=25
6
6=36
2525=625
76
76=5776

n = int(input())
# 求数的长度
k=len(str(n))
# 计算数的后几位
t=(n*n) % (10**k)
if t==n:
    print(True)
else:
    print(False)
2)以内(包括n)的自守数的个数

输入格式:第一行输入n,接下去n行随后输入n个正整数Data。
输出格式:在一行中输出n个 Data以内自守数的个数,所有输出在一行内完成,末尾没有多余空格。

思路:统计从0到n中的自守数的个数

num = int(input())
res= []
out= []
for i in range(num):
    res.append(int(input()))
for n in res:
    count = 0
    for i in range(n+1):
        k = len(str(i))
        t = (i*i)%(10**k)
        if t == i:
            print(i)
            count+=1
    out.append(count)
print(out)
3)N-自守数

如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”
输入格式:输入在第一行中给出正整数 M,随后一行给出 M 个待检测的、不超过 1000 的正整数。
输出格式:对每个需要检测的数字,如果它是 N-自守数就在一行中输出最小的N和NK^2的值,以一个空格隔开;否则输出 No。注意题目保证 N<10。

思路:设置一个标志位来判断当前的数是否为自守数,是的话则遍历求其N-自守数,因为是求最小的N,所以一旦满足要求就退出循环,不需要搜索后面的数字是否为N-自守数

n = int(input())
num = list(map(int, input().split(' ')))

for i in range(n):
    t = num[i]    #检测的数字
    flag = False
    for j in range(10):
        k = len(str(t))
        sums = t * t * j
        tmp = sums %(10 ** k)
        if tmp == t:
            print(j, sums)
            flag =True
            break
    if flag == False:
        print('No')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值