PAT乙级真题1091 || N-自守数(详解,C/C++示例,测试点分析)

公众号:计算机黑科学大全
【欢迎关注微信公众号:计算机黑科学大全,在对话框回复:PAT乙级真题】获取全部真题详解及代码示例,邀请大家加入PAT算法刷题交流qq群:821388108
个人博客:https://mzwang.top

N-自守数

题目描述:

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

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

输入格式:

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

输出格式:

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

输入样例:

3
92 5 233

输出样例:

3 25392
1 25
No

题目来源:PAT乙级1091
作者:CHEN, Yue
单位:浙江大学

问题解决:

解题思想

关键是判断某个数K是否是N-自守数。判断K的平方乘以N得到的数的末尾几位与K是否相等,只需从后往前逐位判断是否相等即可。

坑点提醒

None

代码示例(C/C++)

小提示:请将以下代码保存为.cpp格式(C++程序)左右滑动代码以查看完整代码(复制本文链接到电脑端浏览效果更佳)

#include <iostream>

using namespace std;
bool is_n_automorph(int tmp, int p) {
    while (tmp) {
        if (p % 10 != tmp % 10) {
            return false;
        }
        else {
            p /= 10;
            tmp /= 10;
        }
    }
    return true;
}

int main () {
    int m;
    cin >> m;
    while (m--) {
        int tmp, flag = 0;
        cin >> tmp;
        for (int n = 1; n < 10; n++) {
            int p = n * tmp * tmp;
            if (is_n_automorph(tmp, p)) {
                cout << n << " " << p << endl;
                flag = 1;
                break;
            }
        }
        if (flag == 0) {
            cout << "No" << endl;
        }
    }
}

微信号:QKD2015WMZ

发布了95 篇原创文章 · 获赞 3 · 访问量 4129
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 大白 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览