要点分析:
1.x的取值范围应当是10000~sqrt(987654321);
2.用一个十位一维数组,用序号位来判定数字是否出现过,即每个数组元素分别为序号位对应的数字的flag;
3.每一次最外循环都要把数组和数字出现计数的变量重置。
编码器:vs2019
#include#include int main() { long X1[10], x, k = 0, y, y2; int i, t, n = 0; for (x = 10000; x < sqrt(987654321); x++) { for (i = 0; i < 9; i++) { X1[i] = 0; } y2 = y = x * x; k = 0; for (i = 0; i < 9; i++) { t = y2 % 10; y2 = y2 / 10; if (X1[t] == 0) { k++; X1[t] = 1; } if (k == 9) { printf("%ld^2=%ldt", x, y); n++; if (n % 3 == 0) { printf("n"); } } } } }



