同构数:正整数n若是它平方数的尾部,则称n为同构数。
例如:5的平方数是25,且5出现在25的右侧,那么5就是一个同构数。(转自360百科)
public class TongGou1{
/**
* 主要是根据for循环来进行数的增加和if条件语句
* 执行速度要比根据String.endsWith(String suffix)方法快一点点
* 通过取余运算进行判断,结构更加复杂
* */
public static void main(String[] args){
int i,j,k;//需要更大范围的同构数可以定义为long型
k=10;
for(i = 1;i < Integer.MAX_VALUE - 1;i++){
if(i == k){
k *= 10;
}
j = i * i;
if((j % k) == i){
System.out.println(i + " " + j);
}
}
}
}
Output:
1 1
5 25
6 36
25 625
76 5776
376 141376
625 390625
9376 87909376
我还看到了第二种思路,也让自己学会了新姿势
public class TongGou2{
/**
* 循环,1~Integer.MAX_VALUE
* sq : i ^ 2 对应的字符串
* ii : i 对应的字符串
* 利用 String.endsWith(String suffix) 完成后缀的比对
* 缺点:效率比较低
*/
public static void main(String[] args){
String si = "";
String sj = "";
for(long i = 1; i < Integer.MAX_VALUE-1; i++){
si = String.valueOf(i * i);
sj = String.valueOf(i);
if(si.endsWith(sj)){
System.out.println(sj + " " + si)
}
}
}
}
Output:
1 1
5 25
6 36
25 625
76 5776
376 141376
625 390625
9376 87909376
90625 8212890625
109376 11963109376
890625 793212890625
2890625 8355712890625
.......