题目描述
所谓同构数是指:如果正整数n是它的平方的尾部,那么称n为同构数。例如:5的平方是25,且 5 出现在 25 的尾部,那么 5 就是一个同构数。又如,25 的平方是 625,且 25 出现在625的尾部,同理25也是同构数。
现给定两个正整数M和N,请你计算出M和N之间一共有多少个同构数。
输入格式
一行,两个正整数,分别表示M和N,其中0<M<N≤10000.
输出格式
一个行,一个正整数,表示[M,N]之间同构数的总个数
输入输出样例
输入样例1:复制
4 10
输出样例1:复制
2
【耗时限制】1000ms 【内存限制】128MB
我用的是笨方法,只能应对这一题
代码如下:
#include<iostream>
#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std;
bool tong(int n){
int b,c,d,e;
b=n*n/10%10*10;
c=n*n/100%10*100;
d=n*n/1000%10*1000;
e=n*n/10000%10*10000;
if(n<10){
if(n==(n*n%10)) return true;
}
else if(n<100){
if(n==(b+n*n%10)) return true;
}
else if(n<1000){
if(n==(c+b+n*n%10)) return true;
}
else if(n<10000){
if(n==(d+c+d+n*n%10)) return true;
}
else if(n==10000){
if(n==(e+d+c+b+n*n%10)) return true;
}
return false;
}
int main(){
int m,n,cnt=0;
cin>>m>>n;
for(int i=m;i<=n;i++){
if(tong(i)) cnt++;
}
cout<<cnt;
return 0;
}