直接看我的代码吧,很好理解的,你的代码有点乱。
思路大概就是:把本来的数和平方之后的数循环对10取余然后进行比较,因为本来的数肯定是小于平方之后的,那么跳出循环的条件就是本身的数取余取成0了。那么在比较过程中如果没有碰到不相等的情况,那么这个数就肯定是自守数了。
这个代码输入一个值,然后求小于这个值的所有自守数。
#include <stdio.h>
typedef long long int llint;
int JudgeAutomorphicNumber(llint number_);
int main() {
llint limit;
scanf("%lld", &limit);
for (llint current = 1; current <= limit; ++current) {
if (JudgeAutomorphicNumber(current)) {
printf("%lld ", current);
}
}
return 0;
}
int JudgeAutomorphicNumber(llint number_) {
llint quadratic = number_ * number_;
while (number_) {
if (number_ % 10 == quadratic % 10) {
number_ = number_ / 10;
quadratic = quadratic / 10;
} else {
return 0;
}
}
return 1;
}
你这代码写的乱七八糟
1.第一个if恒为假,a怎么可能大于10000的同时还小于1的
2.不管m是多少,肯定要执行平方的,你不用在每个分支里写计算平方
3.你可以直接算m有多少位,有n位就取n位,你这样一个一个if写死太冗余了
4.m能不能取到5,跟你输入的m和n有关系,你到底输入了什么?n正确赋值了吗,先别着急让代码往下跑,scanf之后先printf出来看看m和n到底是多少