1091 N-自守数 (15 分)
原题
https://pintia.cn/problem-sets/994805260223102976/problems/1071785664454127616
代码
#include <iostream>
#include <algorithm>
using namespace std;
int main() {
int M,N;
cin>>M;
for(int i=0;i<M;i++){
bool flag=true;
cin>>N;
if(N==0){ cout<<1<<" "<<0; return 0;};
int temp=N,cnt=10;
while((temp=temp/10)>=1) cnt*=10;//获取N的位数
for(int K=1;K<10;K++){
temp=K*N*N;
if(temp%cnt==N){
cout<<K<<" "<<temp<<endl;
flag=false;
break;
}
}
if(flag) cout<<"No"<<endl;
}
return 0;
}
再加上柳大佬的解答,总有比我解答的好要学习
#include <iostream>
#include <string>
using namespace std;
int main() {
int m;
cin>>m;
while (m--)
{
int k;
cin>>k;
bool flag=true;
string str_k=to_string(k);
for (int n = 1; n < 10; n++)
{
string str_min=to_string(n*k*k);//to_string()转化成string类型
string sub=str_min.substr(str_min.length()-str_k.length());//string.sub(pos,最后)按顺序填入参数
if (str_k==sub)
{
// printf("%d %s\n",n,str_min); printf不能输出string类型的数据
cout<<n<<" "<<str_min<<endl;
flag=false;
break;
}
}
if(flag) printf("No\n");
}
return 0;
}