#include#include int main() { int n,b,c=0,j; scanf_s("%d", &n);//输入n求n以内的 while (n > 1)//n以内的就用这种循环就行了 { for (j=10;j<=10000000;j*=10)//因为用到取余数,所以j等于10的次方 { if (n==10||n==100||n==1000)//e这几个特殊的值不好搞,单独拉了出来 { c = c + 1; break; } else if ((n * n) % j == n*n&&n>3 )//如果是2,3即使第一次循环也满足(n*n)%10=n*n { j /= 10;//等于本身后,再往后降下一次幂 if (((n * n) % j) == n % j)//如果是同构数 { c = c + 1; break;//跳出for循环 } else j *= 10;//没有这条会进入死循环!降一次又升一次幂 } } n--; } printf("%d", c); return 0; }
一开始的错竟然是 if(); 给if加了分号...
后来不断的找特殊值修改,逐条测试,最后也成了
#include#include int main() { int a=0,b=0,c=0,sqare; int i=0,j=0; printf("Print all the isomorphism between 1-999:n"); for(i=1;i<1000;i++) { a=i*i; int pow=1; while(pow<=i) pow*=10;//判断有几位是0 if((a-i)%pow==0) printf("%d ",i); } return 0; } ———————————————— 版权声明:本文为CSDN博主「superlistman」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/qq_51222650/article/details/109185974
这是别人写的,巧妙的运用了同构数的特征,625与25联系是两者相减后面除了百位数都为0
这个数与数之间的联系抓的十分巧妙



