题目
描述
自守数是指一个数的平方的尾数等于该数自身的自然数。例如: 252=625,762=5776,93762=87909376 。请求出n以内的自守数的个数
接口说明
/*
功能: 求出n以内的自守数的个数
输入参数:
int n
返回值:
n以内自守数的数量。
*/
public static int CalcAutomorphicNumbers( int n)
{
/*在这里实现功能*/
return 0;
}
输入
int型整数
输出
n以内自守数的数量。
样例输入
2000
样例输出
8
思路
- 确定数字的位数
- 将平方取余
- 判断是否取余后结果与当前数字相同,若相同则是自守数,否则不是。
代码
#include <iostream>
#include <cmath>
using namespace std;
//计算数字的位数
int digitalWidth(int num)
{
return (num/10)?digitalWidth(num/10)+1:1;
}
//计算平方
double myPow(int base,int pow){
double result=(pow==0)?0:1;
while(pow!=0){
result*=base;
pow--;
}
return result;
}
int main()
{
int number=0,dw=0,counter=0;
cin>>number;
long long square = 0;//避免溢出
for(int i=0; i<=number; ++i)
{
dw = digitalWidth(i);//计算位数
square = i * i;//平方的值
if(square%(static_cast<int>(myPow(10,dw)))==i)
{
//cout<<i<<endl; 输出哪些是自守数
counter++;
}
}
cout<<counter<<endl;
return 0;
}
注意:一定要确保运算是正确的,尤其是调用一些pow 函数时,这里我选择自己写pow函数。