首页 > 试题广场 >

自守数

[编程题]自守数
  • 热度指数:156791 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 32M,其他语言64M
  • 算法知识视频讲解
\hspace{15pt}自守数是指这样一个自然数 x,其平方的尾数等于自身。更具体的说,即 x^2 的末尾若干位恰好等于 x,例如:
\hspace{23pt}\bullet\, 25^2=625625 的末尾两位恰好是 25
\hspace{23pt}\bullet\, 76^2=57765776 的末尾两位恰好是 76
\hspace{23pt}\bullet\, 9\,376^2=87\,909\,37687\,909\,376 的末尾四位恰好是 9\,376
\hspace{15pt}现在,对于给定的 n,请统计 0n 之间的自守数个数。

输入描述:
\hspace{15pt}输入一个整数 n \left(1 \leqq n \leqq 10^4\right) 代表自守数的范围。


输出描述:
\hspace{15pt}输出一个整数,代表 0n 之间的自守数个数。
示例1

输入

25

输出

5

说明

\hspace{15pt}在这个样例中,0,1,5,6,25 是自守数。
n = int(input())
a = []
t = []
N = 0 for i in range(n + 1):
    ping = str(i ** 2)
    a = list(ping) for j in range(len(a)): if int(''.join(a[j:])) == i:
            N += 1  break #这个退出是由于2000里的异常数据625,625*625=290625.“0625”在转换成int的时候会多加一次  print(N)
发表于 2025-04-14 21:06:05 回复(0)
def zishoushu(n):
    s = str(n*n)
    l = len(str(n))
    l1 = len(s)
    if s[l1-l:l1] == str(n):
        return 1
    else:
        return 0
m = int(input())
sum = 0
for i in range(m+1):
    sum += zishoushu(i)
print(sum)

发表于 2024-12-25 14:08:48 回复(0)
x = int(input())
result = 0
for i in range(x+1):
    if str(i**2).endswith(str(i)):
        result += 1
print(result)

发表于 2024-08-12 16:07:27 回复(0)
x = int(input())

y = list()
for i in range(0, x + 1):
    a = i * i
    if i == int(str(a)[-1]) and i <= 10:
        y.append(i)
    elif i == int(str(a)[-2:]) and i <= 100:
        y.append(i)
    elif i == int(str(a)[-3:]) and i <= 1000:
        y.append(i)
    elif i == int(str(a)[-4:]) and i <= 10000:
        y.append(i)

print(len(y))

发表于 2024-08-08 12:48:58 回复(0)
"""
1. 遍历数
2. 求平方,然后截取出尾数
3. 比较尾数和i是否相等
"""
n = int(input())

res = 0

for i in range(n+1):

    p = pow(i,2)

    il = len(str(i))

    sub = str(p)[-il:]

    if str(i) in sub:
        res += 1

print(res)

发表于 2024-06-03 23:19:17 回复(0)
n=int(input())
l=[]
cnt=0
for i in range(n+1):  # 遍历n及n以内的数,将其的平方存在数组l中
    l.append(i*i)
    if str(l[i])[-len(str(i))::]==str(i):  # 对平方数组的元素做判断,符合自守数则计数+1;否则计数不变
        cnt += 1
    else:
        cnt += 0
print(cnt)

发表于 2024-06-01 15:08:06 回复(0)
import sys

while True:
    try:      
        print(len([i for i in range(int(input())+1) if str(i) == str(i**2)[-len(str(i)):]]))
               
    except:
        break
发表于 2024-05-19 21:54:21 回复(0)
num = int(input())
sum = 0
for i in range(num+1):
    cf = i*i
    if str(i) == str(cf)[-len(str(i))::]:
        sum += 1
print(sum)
发表于 2023-11-10 01:04:21 回复(0)
n = int(input())
count = 0

for i in range(0, n+1):
    sq = i ** 2
    if sq == i&nbs***bsp;int(str(sq)[len(str(sq))-len(str(i)):]) == i:
        count += 1

print(count)

发表于 2023-11-02 21:48:10 回复(0)
n=int(input())
m=0
if n in range(1,10001):    
    for i in range(n+1):
        if str(i**2)[-1]==str(i)[-1]:
            m+=1
    print(m)
发表于 2023-10-24 16:45:33 回复(0)
n = int(input())

count = 0
for i in range(n+1):
    if str(i**2)[-len(str(i))::] == str(i):
        count += 1
print(count)

发表于 2023-09-30 17:09:15 回复(0)
dic = []
x = int(input())
for i in range(x+1):
    n = len(str(i))
    if i * i % (10 ** n) == i:
        flag = 1
    else:
        flag = 0
    if flag == 1:
        dic.append(i)
print(len(dic))


发表于 2023-09-24 16:58:52 回复(0)
计算结果转为字符串后进行比较
n = int(input())
cnt = 0
for i in range(n+1):
    if str(i*i)[len(str(i*i))-len(str(i)):] == str(i):
        cnt+=1

print(cnt)


发表于 2023-07-27 15:22:29 回复(0)
import sys
n=int(input())
s=[]
for i in range(n+1):
    x = i*i
    m = str(x)
    if i == int(m[m.rfind(str(i)):]):  
       s.append(x)
print(len(s))
发表于 2023-06-27 18:30:52 回复(0)
# a = "abcdefg"
# print(a[:3:-1])
def zishou(num):
    a = str(num ** 2)
    b = int(len(a)/2)
    if a[b:] == str(num):
        return True
num = 0
for j in range(int(input())+1):
    c = zishou(j)
    if c==True:
        num+=1
print(num)

发表于 2023-06-12 12:24:02 回复(0)
def zishoushu(n):
    nn = n * n
    x = list(reversed(str(nn)))
    y = list(reversed(str(n)))
    l = len(y)
    count = 0
    for i in range(l):
        if x[i] != y[i]:
            count += 1
    if count == 0:
        return True
    else:
        return False

n = int(input())
count = 0
for i in range(n+1):
    if zishoushu(i):
        count += 1
print(count)
发表于 2023-06-11 13:05:32 回复(0)
num = int(input())
number = 0
string = '0 1 5 6'
for i in range(num+1):
    if str(i)[-1] in string:
        square_i = i**2
        end_num = str(square_i)[-len(str(i)):]
        if str(i) == end_num:
            number+=1
print(number)

发表于 2023-04-18 11:58:06 回复(0)
n = input()
count = 0
for i in range(int(n)+1):
    ii = i ** 2
    m = str(ii)
    if i == int(m[m.rfind(str(i)):]):     #判断是否为自守数
        count += 1
print(count)

发表于 2023-04-04 11:51:38 回复(0)
a=int(input())
b=[]
count=0
for i in range(a+1):
    l=len(str(i))
    c=list(str(i*i))
    d=''.join(c[-l:])
    d=d.lstrip('0')
    if d == '':
        d = '0'
    d=eval(d)
    if i == d:
        count+=1
print(count)

发表于 2023-03-05 23:38:16 回复(0)