题解 | 华为HJ99#自守数#
自守数
https://www.nowcoder.com/practice/88ddd31618f04514ae3a689e83f3ab8e
描述
自守数是指一个数的平方的尾数等于该数自身的自然数。例如: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这两个自守数
#include <stdio.h>
#include <math.h>
//以下是Senky的代码
int cal_bite(int i) { //返回i的位数
int bite = 1;
while (i / 10) {
i = i / 10;
bite++;
}
return bite;
}
int is_thenumber(int i, int bite) {//返回1则是自守数
int ret = 0;
int num = i * i; //i的平方
if (num % ((int)pow(10,bite)) == i)
ret =1; //i平方取末尾i位数等于i就是自守数
return ret;
}
int main() {
int n = 0;
scanf("%d", &n);
int bite = 0;//当前数字的位数
int count = 0;
for (int i = 0; i <= n; i++) {
bite = cal_bite(i);//获取位数
count += is_thenumber(i, bite);//计数器
}
printf("%d", count);
return 0;//编辑于2022/10/12
}
总结:
①难度不大,保持手感 ;
② 当前帖子仅供自我精进、学习使用,有不足之处欢迎指正;
华为-HJ 文章被收录于专栏
机试的题解
查看4道真题和解析
