前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PAT (Basic Level) Practice (中文)1091 N-自守数

PAT (Basic Level) Practice (中文)1091 N-自守数

作者头像
C you again 的博客
发布2020-09-15 10:50:04
3600
发布2020-09-15 10:50:04
举报
1091 N-自守数

如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”。例如 3×922=25392,而 25392 的末尾两位正好是 92,所以 92 是一个 3-自守数。

本题就请你编写程序判断一个给定的数字是否关于某个 N 是 N-自守数。

输入格式:

输入在第一行中给出正整数 M(≤20),随后一行给出 M 个待检测的、不超过 1000 的正整数。

输出格式:

对每个需要检测的数字,如果它是 N-自守数就在一行中输出最小的 N 和 NK2 的值,以一个空格隔开;否则输出 No。注意题目保证 N<10。

输入样例:

3 92 5 233

输出样例:

3 25392 1 25 No

代码:

代码语言:javascript
复制
#include<stdio.h>
int fun(int K)
{
    int wei=fun_1(K);
  //  printf("wei==%d\n",wei);
    int N;
    int l=1;
    for(N=1;N<10;N++)
    {
        int p=fun_2(N*K*K,wei);
       // printf("p==%d\n",p);
        if(p==K) {
            l=0;
            //printf("%d %d\n",N,N*K*K);
            break;
        }
    }
    if(l==1) return -1;
    else return N;
}
int fun_1(int n)
{
    int temp=0;
    while(n)
    {
        n/=10;
        temp++;
    }
    return temp;
}

int fun_2(int n,int wei)
{
    int i=1;
    int t=0;
    int sum=0;
    int *arr=(int*)malloc(sizeof(int)*wei);
    while(i<=wei)
    {
        int temp=n%10;
        arr[t++]=temp;
        n/=10;
        i++;
    }
    for(i=t-1;i>=0;i--)
        sum=sum*10+arr[i];
    return sum;
}
int main()
{
    int M;
    int Ki[22];
    int i;
    scanf("%d",&M);
    for(i=0;i<M;i++)
    {
        scanf("%d",&Ki[i]);
    }
    for(i=0;i<M;i++)
    {
        int t=fun(Ki[i]);
        if(t<0) printf("No\n");
        else printf("%d %d\n",t,t*Ki[i]*Ki[i]);
    }
    return 0;
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/01/28 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1091 N-自守数
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档