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

【九度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 日

上一篇:尚硅谷springboot学习24-错误处理


下一篇:Update Bits