PTA B1091 N-自守数 C++/Python3

题目描述

如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”。例如 3×92 2
=25392,而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守数。

本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数。

输入格式

输入在第一行中给出正整数 M(≤20),随后一行给出 M 个待检测的、不超过 1000 的正整数。

输出格式

对每个需要检测的数字,如果它是 N-自守数就在一行中输出最小的 N 和 NK 2 的值,以一个空格隔开;否则输出 No。注意题目保证 N<10。

样例 #1

样例输入 #1

3
92 5 233

样例输出 #1

3 25392
1 25
No

C++

#include <bits/stdc++.h>

using namespace std;

int m;
signed main() {
    cin>>m;
    while(m--) {
        int t;
        cin>>t;
        //布尔值 是否存在自守数
        bool noANS=true;
        for(int i=1; i<10; i++) {
            //将NK^2转为字符串 取字符串后n(K的位数)位与字符串K比较
            //如果相等,说明是自守数输出,并标记答案存在
            string K = to_string(t);
            string cal=to_string(i*t*t);
            if(cal.substr(cal.size()-K.size())==K) {
                noANS=false;
                cout<<i<<" "<<cal<<"\n";
                break;
            }
        }
        //不存在自守数,输出No
        if(noANS) cout<<"No\n";
    }
    return 0;
}

Python3/Pypy3

n = input()
num = list(map(int, input().split()))
for i in num:
    for j in range(1, 11):
        if str(i * i * j)[-len(str(i)):] == str(i):
            print("%d %d" % (j, i * i * j))
            break
    else:
        print("No")

添加新评论