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;
}
posted @ 2021-12-12 19:59  Infinite_V胜  阅读(8)  评论(0)    收藏  举报