题目链接:请点击
思路:由题给出自守数N<10,又要求最小N,则i从1~10遍历,每次计算res=N*K*K,随后循环得到K的每一位数字并与res的末尾每一位数字判断是否相等(即n%10!=res%10,这里n=K)
AC代码:
#include<iostream>
using namespace std;
int main(){
int M;
cin>>M;
while(M--){
int K,flag=1;
cin>>K;
for(int i=1;i<10;i++){
flag=1;
int n=K;
int res=i*n*n;
while(n){//循环得到n的每一位数组并判断
if(n%10!=res%10){
flag=0;
break;
}
n=n/10;
res=res/10;
}
if(flag){ flag=i;break;}
}
if(flag) cout<<flag<<" "<<flag*K*K<<endl;
else cout<<"No"<<endl;
}
return 0;
}