首页 > 学院 > 开发设计 > 正文

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

2019-11-06 07:09:32
字体:
来源:转载
供稿:网友

【九度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不是守形数。

样例输入:

254

样例输出:

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 日


发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表