首页 > 试题广场 >

自守数

[编程题]自守数
  • 热度指数:143915 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解

自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n(包括n)以内的自守数的个数


数据范围:




输入描述:

int型整数



输出描述:

n以内自守数的数量。

示例1

输入

6

输出

4

说明

有0,1,5,6这四个自守数      
示例2

输入

1

输出

2

说明

有0, 1这两个自守数     
import sys

def func(num):
    n = 0
    for i in range(num+1):
        if str(i*i).endswith(str(i)):
            n += 1
    return n

for line in sys.stdin:
    print(func(int(line.strip())))

发表于 2021-05-17 21:50:31 回复(0)
while(True):
    try:
        n=input()
        num=0
        for i in range(0,int(n)+1):
            b=str(i*i)
            if(str(i)==b[len(b)-len(str(i)):]):
                num+=1
        print(num)
    except:
        break
不知道endswitch函数,直接这么写也行
发表于 2021-04-19 14:10:14 回复(0)

while True:
try:
n=int(input())
count=0
for i in range(n+1):
m=i**2
x=len(str(i)) #数字的长度
if int(str(m)[-x:])==i: # m后x位 与i相等
count+=1
print(count)
except:
break

发表于 2021-04-14 09:32:31 回复(0)

Python

又是比较偷鸡,平方完直接按照原来数据的长度,从最后截取两位来比一下。。。。。

while True:
    try:
        n = int(input())
        count = 0
        for i in range(n+1):
            lenth = len(str(i))
            num = str(i**2)
            judge = num[len(num)-lenth:len(num)]
            if judge == str(i):
                count += 1
        print(count)
    except:
        break
发表于 2021-04-13 09:57:35 回复(0)
while True:
    try:
        num = int(input())
        count = 1
        for i in range(1, num + 1):  #没想到用字符串,憨憨做法哭了
            order_of_i = 0
            while i >= 10 ** order_of_i:
                order_of_i += 1
            if (i * i - i) % (10 ** order_of_i) == 0:
                count += 1
        print(count)
    except:
        break
发表于 2021-03-28 12:06:18 回复(0)
while True:
    try:
        num=int(input())
        n=0
        for i in range(num+1):
            if i**2%(10**len(str(i)))==i:
                n+=1
        print(n)
    except:
        break
发表于 2021-03-25 23:58:47 回复(0)
import sys


for n in sys.stdin:
    count = 0
    for i in range(int(n)+1):
        if str(i**2).endswith(str(i)):
            count += 1
    print(count)

发表于 2020-12-19 16:15:38 回复(0)
while True:
    try:
        n=int(input())
        count=0
        for i in range(n+1):
            t=str(i**2)
            if t[(len(t)-len(str(i))):]==str(i)[:]:
                count+=1
        print (count)
    except:
        break
发表于 2020-12-12 18:02:22 回复(0)
# 2020年11月19日23:03:46
while True:
    try:
        n = int(input())
        num = 0
        for i in range(n+1):
            if str(i**2)[-len(str(i)):] == str(i):
                num += 1
        print(num)
    except:
        break
        

发表于 2020-11-19 23:13:44 回复(0)
while True:
    try:
        num = int(input())
        # 筛出负数
        if num >= 0:
            n = 1
            for i in range(num):
                #先判定是否尾数为1,5,6(尾数为0只考虑0,10、100...等肯定不是);
                #不是则不再计算和判断,节省一些计算和判断过程
                if str(i)[-1] in ['1','5','6']:
                    if str(i*i).endswith(str(i)):
                        n += 1
        else:
            n = 0
        print(n)
    except EOFError:
        break

发表于 2020-10-08 12:06:38 回复(0)
# 尾数相同,可以过滤掉很多不用判断的数据
# 尾数为 1 5 6 的数平方尾数才会出现 1 5 6
while True:
    try:
        n = int(input())
        a, b, c, count = 1, 5, 6, 0
        while True:
            if str(a ** 2).endswith(str(a)):
                count += 1
            if a > n:
                break
            a += 10
            if str(b ** 2).endswith(str(b)):
                count += 1
            if b > n:
                break
            b += 10
            if str(c ** 2).endswith(str(c)):
                count += 1
            if c > n:
                break
            c += 10
        print(count + 1) # 加 1 是因为有个 0 也属于自守数
    except:
        break
        

发表于 2020-10-02 18:00:47 回复(0)

while True:
    try:
        N = int(input())
        num = 0
        for i in range(N):
            if str(i) == str(i**2)[-len(str(i)):]:
                num += 1
        print(num)
    except:
        break

发表于 2020-09-22 11:03:18 回复(0)
while True:
    try:
        num = input()
        count = 0
        for i in range(int(num)):
            str1 = str(i*i)
            str2 = str(i)
            if(str1.find(str2) == len(str1)-len(str2)):
                count += 1
        print(count)
    except:
        break
c++应该也是to_string()然后find(),自守数应该有一些性质来避免那么多循环,然后我不知道怎么优化hhh
发表于 2020-08-19 17:39:14 回复(0)
python lowB解法(压根没想到endwith)
def f(x):
    ct = 0
    while True:
        if x//10 != 0:
            ct += 1
            x = x/10
        else:
            break
    return ct+1
while True:
    try:
        n = int(input())
        count = 0
        for i in range(n+1):

            if (i*i) % pow(10, f(i)) == i:
                count += 1
        print(count)
    except EOFError:
        break


发表于 2020-08-17 11:43:09 回复(0)

def solution(n):
c = 0
d = []
for i in range(n+1):
if i*2 % (10 * (len(str(i)))) == i:
c += 1
d.append(i)
print(c)
while True:
try:
n = int(input())
solution(n)
except:
break

发表于 2020-08-13 15:52:34 回复(1)
while True:
    try:
        import math
        num=int(input())
        calculate=0
        count=0
        for i in range(0,num+1):
            calculate=i**2
            calculate=str(calculate)
            length_c=len(calculate)
            i=str(i)
            length_i=len(i)
            if i==calculate[length_c-length_i:]:
                count+=1
        print(count)
    except:
        break


编辑于 2020-06-24 21:06:04 回复(0)
try:
    nums = int(input())
    count = 1
    for i in range(1,nums):
        tmp = str(i * i)
        lens = len(tmp)
        len_i = len(str(i))
        ts = tmp[lens-len_i:]
        #print(ts)
        if str(i) == ts:
            count += 1
    print('count:',count)
except:
    pass
我这明明有输出,为什么就是显示结果为空呢,在哪可以反馈问题的呀
发表于 2020-06-17 00:14:52 回复(0)
【Python】【老一行了】
while True:
    try:
        print(sum(list(map(lambda x:1 if str(x)==str(x**2)[-len(str(x)):] else 0,range(int(input()))))))
    except:
        break


发表于 2020-05-07 22:03:41 回复(0)