Codeup——587 | 问题 A: 守形数(AC技巧与平常思路)

题目描述

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

输入

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

输出

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

样例输入

6
11

样例输出

Yes!
No!

思路:首先要理解守形数的概念,比如n为76,n2=5776,则76是一个守形数,因为76的位数为2,它平方的后两位为76,也就是它本身,所以这个题我们先统计n的位数d,再用n的平方mod10的d次方,如果结果等于n,则为守形数,一下是第一种方法:

#include <iostream>
#include <cstdio>
using namespace std;

int main()
{
	int n,sum,i,dight,num;
	while(scanf("%d",&n)!=EOF){
		num=n;
		dight=0;sum=1;
		while(num){
			num/=10;
			dight++;
		}
		for(i=0;i<dight;i++)
			sum*=10;
		num=n*n;num%=sum;
		if(num==n)
			printf("Yes!\n");
		else
			printf("No!\n");
	} 
	return 0;
}

还有一种方法可以快速通过,换个角度来想,题中的n是一个不超过100的整数,即n的平方之后其位数不超过5,所以n<10的时候,如果n*n%10==n,则n是守形数,同样的,当100>n>=10时,n*n%100==n,则n是守形数

#include <iostream>
using namespace std;

int main()
{
	int n;
	while(cin >>n){
		if(n*n%10==n||n*n%100==n)
			cout <<"Yes!"<<endl;
		else
			cout <<"No!"<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_44888152/article/details/106873129