一个数恰好出现在它的平方数的右端,这个数就称为同构数。找出1~1000之间的全部同构数。 输出格式: 在一行中输出所有满足条件的同构数,每个数输出占6列。没有其它任何附加格式和字符。 输出样例: 1 5 6 25 76 376 625
由于同构数会出现在自身平方的右端,所以自身平方减去自身会是整十的数倍:x*x-x;
5:5 * 5 - 5 = 20
25:25 * 25- 25 = 600
376:376 * 376 - 376 =141000
根据上面规律看出x*(x-1)%ten == 0。
其中ten代表x有多长就是10的多少次方,25两个单位ten就是100,376三个单位ten就是1000。
public class Main {
public static void main(String[] args) {
int a = 1;
while (a <= 1000) {
if (fun(a))
System.out.printf("%6d", a);
a++;
}
}
// 判断是否为同构数
public static boolean fun(int a) {
int ten = (int) Math.pow(10, len(a));
if (a * (a - 1) % ten == 0)
return true;
return false;
}
// 判断参数有多长
public static int len(int x) {
int n = 0;
while (x > 0) {
x /= 10;
n++;
}
return n;
}
}