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. iOS 使用 Xcode8 制作动态库及静态库

    在使用第三方 SDK 时,经常遇到他们提供的仅仅只有一个动态或静态库,并不能获取源码.使用动态库 FrameWork 或 静态库 Lib,可以满足不想把核心代码的具体实现向使用者展示,又能避免其他人错 ...

  2. Jmeter-maven-plugin github 版本插件变更历史

    https://github.com/jmeter-maven-plugin/jmeter-maven-plugin/blob/master/CHANGELOG.md

  3. 机器学习基础系列--先验概率 后验概率 似然函数 最大似然估计(MLE) 最大后验概率(MAE) 以及贝叶斯公式的理解

    目录 机器学习基础 1. 概率和统计 2. 先验概率(由历史求因) 3. 后验概率(知果求因) 4. 似然函数(由因求果) 5. 有趣的野史--贝叶斯和似然之争-最大似然概率(MLE)-最大后验概率( ...

  4. WKWebView单个界面添加请求头

    https://www.jianshu.com/p/14b9ea4bf1d4 https://github.com/Yeatse/NSURLProtocol-WebKitSupport/blob/ma ...

  5. centos初始化脚本

    centos初始化脚本 添加IP.主机名.挂载/dev/sdb1磁盘 #!/bin/bash # ip=$ hostname=$ if [ -z $ip ] || [ -z $hostname ]; ...

  6. 微信小程序加密解密 C# 以及 填充无效,无法被移除错误的解决方案 Padding is invalid and cannot be removed

    解密加密源码 using System; using System.Security.Cryptography; using System.Text; namespace Wechat { publi ...

  7. GO闭包

    package main import "fmt" func main() { add_func := add(1,2) fmt.Println(add_func(1,1)) fm ...

  8. java模式之单例

    懒汉式:需要实例的时候new public class Singleton_Lazy { private static Singleton_Lazy mSingleton; private Singl ...

  9. C++ 类型、类型转换

    C++ 数据类型 基本内置类型 字面值常量和字面值类型 类类型 隐式的类类型转换 聚合类 字面值常量类 constexpr 构造函数 类的静态成员 使用编程语言进行编程时,需要用到各种变量来存储各种信 ...

  10. Python函数-1 range()函数

    range()函数 在其他语言中,如果想要循环一个变量从1到100,要怎么写呢? for(i = 1,i<=100,i++){} python怎么实现这个功能呢?python设计了range() ...