1091 N-自守数 (15分)
 

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

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

输入格式:

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

输出格式:

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

输入样例:

3
92 5 233
 

输出样例:

3 25392
1 25
No

这道题我偷了一下懒,直接使用sprintf将K, K*K*i写入两个字符数组buf1, buf2,然后用strcmp检测 buf1 与 buf2 + strlen(buf2)- strlen(buf1)是不是相等,相等就返回i,全程没动脑子,暴力解决,我的自守数判断函数,题目说K 不大于 1000 ,那,K的数组只需要 4+1,即可, K2 * n 最大也只能是 1000 * 1000 * 10 = 10000000 ,所以数组长度只需要8+1

int isSDnumber(int K)
{
char buf1[5] = {0}, buf2[9] = {0};
int square = K * K; sprintf(buf1, "%d", K); for (int i = 0; i <= 10; i++)
{
sprintf(buf2, "%d", square * i);
int len = strlen(buf2) - strlen(buf1);
if (0 == strcmp(buf1, buf2 + len))
{
return i;
}
}
return -1;
}

完整代码:

更新 2020-02-14:好吧,小姐姐有投诉我懒了,所以我写了非字符数组的版本的检测

在PAT上提交总体时间耗时比用字符长……

int compare(int x, int k)
{
while (k != 0)
{
int t1 = x % 10;
int t2 = k % 10;
if (t1 != t2)
{
return 0;
}
x /= 10;
k /= 10;
}
return 1;
}

2020-02-1411:58:45 更新:完整的判断函数:

我测试过了,clock出来,这个方法跑完样例1,会比字符数组的块一些,我也不知道为什么,PAT里提交平均水平下字符数组会比较快

好吧,现在我知道了,这个方法对于不是自守数的数会快很多,

对于整个数组测试组数为5 且全为非自守数且全为999,这种极端情况下,大概快9倍,

对于整个数组测试组数为5 且全为自守数并且为1000,这种极端情况下,字符数组方法比非字符快10倍左右

对于整个数组测试组数为5 且全为自守数并且为1000,这种极端情况下,差不多持平

int isSDnumber(int k)
{
for (int i = 0; i <= 10; i++)
{
int temp = k;
int square = (i * k * k);
while (temp != 0)
{
int t1 = square % 10;
int t2 = temp % 10;
if (t1 != t2)
{
break;
}
square /= 10;
temp /= 10;
}
if (i > 0 && 0 == temp)
{
return i;
}
}
return -1;
}

完整代码:

PAT不易,诸君共勉!

P1091 N-自守数的更多相关文章

  1. HW--自守数

    package testcase; import huawei.Demo; import junit.framework.TestCase;//加入测试框架,不需要写Main函数 public cla ...

  2. C语言之自守数

    自守数 自守数是指一个数的平方的尾数等于该数自身的自然数,如25*25=625,76*76=5776.要求求出一定范围内的所有自守数. 题目分析: 刚拿到这个题目的时候认为解题关键在于,测试该数平方数 ...

  3. 自守数算法----C语言实现

    #include <stdio.h> //自守数算法 //ep : 25 ^ 2 = 625 76 ^ 2 = 5776 9376 ^ 2 = 87909376 /*ep : * 376 ...

  4. 1091 N-自守数

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

  5. PAT 乙级 1091 N-自守数 (15 分)

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

  6. pat乙级 1091 N-自守数 (15 分)

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

  7. 1091 N-自守数 (15 分)

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

  8. B1091 N-自守数 (15分)

    B1091 N-自守数 (15分) 如果某个数 \(K\)的平方乘以\(N\) 以后,结果的末尾几位数等于 \(K\),那么就称这个数为"\(N\)-自守数".例如 \(3×92 ...

  9. PAT 乙级 1091.N-自守数 C++/Java

    题目来源 如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”.例如 3,而 2 的末尾两位正好是 9,所以 9 是一个 3-自守数. 本题就请你编写程序判断 ...

随机推荐

  1. Android 调用系统Email发送带多附件的邮件

    转自:http://www.open-open.com/lib/view/open1347005126912.html 众所周知,在Android中调用其他程序进行相关处理,都是使用的Intent.当 ...

  2. 洛谷P2142 高精度减法 题解

    想找原题请点击这里:传送门 原题: 题目描述 高精度减法 输入格式 两个整数a,b(第二个可能比第一个大) 输出格式 结果(是负数要输出负号) 输入输出样例 输入 复制 输出 复制 说明/提示 %数据 ...

  3. 3种使用MQ实现分布式事务的方式

    1.保证消息传递与一致性 1.1生产者确保消息自主性 当生产者发送一条消息时,它必须完成他的所有业务操作. 如下图: 这保证消费者接受到消息时,生产者已处理完毕相关业务,也就是1PC的基础. 1.2 ...

  4. connection String加密

    aspnet_regiis -pe "connectionStrings" -app "/HG" -prov "ChrisProvider" ...

  5. win10 免安装版本的MySQL的下载安装和配置

    一.概述 网上找了好多,发现好多不是linux系统的就是与现在新版本有出入,自己做小项目亲手实践了一下,供大家借鉴. MySQL版本:mysql-5.7.17 下载方法: 1.MySQL官方网址htt ...

  6. 学习不一样的vue5:vuex(完结)

    学习不一样的vue5:vuex(完结)  发表于 2017-09-10 |  分类于 web前端|  |  阅读次数 4029 首先 首发博客: 我的博客 项目源码: 源码(喜欢请star) 项目预览 ...

  7. mybatis利用generator自动生成的代码

    /** * 排序规则 */ protected String orderByClause; /** * 去重规则 */ protected boolean distinct; /** * where条 ...

  8. Webshell免杀研究

    前言 不想当将军的士兵不是好士兵,不想getshell的Hacker不是好Hacker~有时候我们在做攻防对抗时经常会碰到可以上传webshell的地方,但是经常会被安全狗.D盾.护卫神.云锁等安全软 ...

  9. Codeforces 1260 ABC

    DEF 题对于 wyh 来说过于毒瘤,十分不可做. A. Heating Description: 给定\(a,b\),将\(b\)分成至少\(a\)个正整数,使这些正整数的平方和最小. Soluti ...

  10. Ansible ssh-key密钥认证配置

    对于被管理服务器做免密码登录设置 1.在管理服务器生成ssh-key密钥 #ssh-keygen  //生成秘钥 root@hsz:/etc/ansible# ssh-keygen Generatin ...