欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

华为机器测试问题 99 - 自洽数

最编程 2024-03-17 18:56:10
...

描述

自守数是指一个数的平方的尾数等于该数自身的自然数。例如:25^2 = 625,76^2 = 5776,9376^2 = 87909376。请求出n(包括n)以内的自守数的个数

数据范围: 1≤n≤10000

输入描述:

int型整数

输出描述:

n以内自守数的数量。

示例1

输入:

6

输出:

4

说明:

有0,1,5,6这四个自守数      

示例2

输入:

1

输出:

2

说明:

有0, 1这两个自守数 


解题思路:

我的想法就是把原数字和其平方都算出来,然后转换成字符的形式,比如25,其平方数为625,我将这两个数对10取模,再除10,循环进行,直到数字除成了0。那么25的字符格式为{'5','2'},而625的字符格式为{'5','2','6'},只需要对比原数字的位数个字符即可完成自守数的判定,25有两位,分别对比可知,25是自守数。代码如下:

#include <stdio.h>
#include <string.h>
#define    N    10
void transport(int x,char str[])
{
    int i=0;
    while(x>0)
    {
        str[i++]=x%10+'0';
        x/=10;
    }
}
int main()
{
    int n,i,j,temp,len,cnt=0;
    char num[N],square[N];
    scanf("%d",&n);
    for(i=0;i<=n;i++)
    {
        for(j=0;j<N;j++)
        {
            num[j]='\0';
            square[j]='\0';
        }
        temp=i*i;
        transport(i,num);
        transport(temp,square);
        len=strlen(num);
        for(j=0;j<len;j++)
        {
            if(num[j]!=square[j])
                break;
        }
        if(j==len)
            cnt++;
    }
    printf("%d\n",cnt);
    return 0;
}