题目入口
题目描述
守形数是这样一种整数,它的平方的低位部分等于它本身。
比如25的平方是625,低位部分是25,因此25是一个守形数。
编一个程序,判断N是否为守形数。
输入
输入包括1个整数N,2<=N<100。
输出
可能有多组测试数据,对于每组数据,
输出"Yes!”表示N是守形数。
输出"No!”表示N不是守形数。
样例输入
6
11
样例输出
Yes!
No!
思路
先计算出平方数的低位部分的数值,然后于原数进行比较,如果相等则是守形数,如果不是则不是守形数。
低位部分的计算,首先要计算出原数的位数n,然后从平方数的后面截取n位,即为低位部分的数值。
代码
/*
http://codeup.hustoj.com/problem.php?cid=100000588&pid=0
*/
#include <iostream>
#include <vector>
using namespace std;
int n;
int len(int i)
{
int count = 0;
while (i > 0)
{
count++;
i /= 10;
}
return count;
}
bool judge(int i)
{
vector<int> arr;
int num = i * i;
while (num > 0)
{
arr.push_back(num % 10);
num /= 10;
}
int ans = 0;
for (int j = len(i) - 1; j >= 0; j--)
{
ans = ans * 10 + arr.at(j);
}
if (ans == i)
{
return true;
}
return false;
}
int main()
{
while (cin >> n)
{
if (judge(n))
{
cout << "Yes!" << endl;
}
else
{
cout << "No!" << endl;
}
}
return 0;
}