华为机器测试问题 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;
}