【九度OJ】题目1183:守形数 解题报告

标签(空格分隔): 九度OJ


原题地址:http://ac.jobdu.com/problem.php?pid=1183

题目描述:

守形数是这样一种整数,它的平方的低位部分等于它本身。
比如25的平方是625,低位部分是25,因此25是一个守形数。
编一个程序,判断N是否为守形数。

输入:

输入包括1个整数N,2<=N<100。

输出:

可能有多组测试数据,对于每组数据,
输出”Yes!”表示N是守形数。
输出”No!”表示N不是守形数。

样例输入:

25
4

样例输出:

Yes!
No!

Ways

这个题很简单,就是考虑一个数的平方的后面几个数字和自己是否相同。

唯一的难点在于,不好判断低位部分是几位。第一感觉是计算出n有几位,然后看ns的后几位即可,但是感觉这么着和两个数同时/10看余 复杂度一样的。就采用了不断/10和比较余数的方案。

当n等于0的时候,说明把n的所有位数都参与了比较仍然没有找到不同的数字,这是即可跳出循环,判断为yes。如果在循环中有1位的不同,即可输出no.

下面这个方法得到了Output Limit Exceed的错误,查看了帮助知道是我的输出的长度正好是答案的两倍长度。这就让我检查了是不是有东西重复输出了,果然,跳出循环后的yes会一直输出。应该放到循环里边输出就好了。

#include <stdio.h>

int main() {
int n;
while (scanf("%d", &n) != EOF) {
int ns = n * n;
while (n > 0) {
if (n % 10 == ns % 10) {
n /= 10;
ns /= 10;
} else {
printf("No!\n");
break;
}
}
printf("Yes!\n");// 放的位置不对。
}
return 0;
}

改成下面这样就成功AC了。

#include <stdio.h>

int main() {
int n;
while (scanf("%d", &n) != EOF) {
int ns = n * n;
while (n > 0) {
if (n % 10 == ns % 10) {
n /= 10;
ns /= 10;
if (n == 0) {
printf("Yes!\n");
break;
}
} else {
printf("No!\n");
break;
}
}
}
return 0;
}

Date

2017 年 3 月 5 日

最新文章

  1. 窥探Swift之别样的枚举类型
  2. WIN8 隐私声明
  3. why does turn off button means hibernate on my win8
  4. LaTex数学符号
  5. DNA排序
  6. Acitivity间数据的传递
  7. 纯js滑动脚本
  8. 5.IP选路,动态选路
  9. 【Android 应用开发】BluetoothAdapter解析
  10. 微信小程序开发小结
  11. gulp自动化构建工具的使用
  12. Python中的@符号
  13. MySQL8常见客户端和启动相关参数
  14. CODEVS 2455 繁忙的都市 SCOI2005(洛谷 P2330)
  15. Linux中的#和$区别
  16. P2016 战略游戏
  17. 自定义UITableViewCell上的delete按钮
  18. 牛客网-《剑指offer》-矩形覆盖
  19. 如何确定拍照时,相机屏幕是横屏or竖屏?
  20. Python(IO model)

热门文章

  1. R同时保存png/pdf等格式图片
  2. dlang 读取gz压缩文件
  3. 单片机ISP、IAP和ICP几种烧录方式的区别
  4. 字符scanf 的输入注意
  5. 【模板】Splay(伸展树)普通平衡树(数据加强版)/洛谷P6136
  6. 分布式事务(3)---强一致性分布式事务Atomikos实战
  7. 同步阻塞IO模型
  8. JS控制元素的显示和隐藏
  9. Java中方法的定义与使用
  10. Dubbo服务调用超时