求水花仙数无外乎两步:1、拆分。2、求和
我是将整数转换成字符串,利用java中的String类和Integer类实现的。
public class WaterNumber {
public static final int MILLION = 1000000;
public static final int ONE = 1;
public static int[] changeInteger(int i) {
int size = ((int) Math.log10(i)) + 1;
int[] a = new int[size];
for (int j = 0; j < size; j++) {
a[j] = Integer.parseInt(Integer.toString(i).substring(j, j + 1));//把整数的各位放到数组中,便于安形式打印
}
return a;
}
public static boolean isWaterNum(int i) {
int[] a = changeInteger(i);
int sum = 0;
for (int j = 0; j < a.length; j++) {
int temp = 1;
for (int k = 0; k < a.length; k++) {
temp *= a[j];
}
sum += temp;
}
if (i == sum) {
return true;
} else
return false;
}
public static String getWaterNumber(int m, int n) {// 求m-n的所有水花仙数,并放到String中
StringBuffer sb = new StringBuffer();
// System.out.println("进入printWater");
int countWater = 0;
for (int i = m; i < n; i++) {
if (isWaterNum(i)) {
int[] a = changeInteger(i);
sb.append(i).append("=");
for (int k = 0; k < a.length; k++) {
for (int j = 0; j < a.length; j++) {
sb.append(a[k]).append("*");
}
sb.delete(sb.length() - 1, sb.length());//去掉最后的"*"
sb.append("+");
}
sb.delete(sb.length() - 1, sb.length());//去掉最后的“+”号
sb.append("/n");
countWater++;
}
// else return;//结束该方法
}
if (countWater == 0) {
System.out.println(m + "到" + n + "之间没有水花仙数");
} else {
System.out.println(m + "到" + n + "之间有" + countWater + "个水花仙数");
}
// System.out.println("退出printWater");
return sb.toString();
}
public static void printWaterNumber(int m,int n) {
String s = WaterNumber.getWaterNumber(m,
n);
System.out.println("打印水花仙数:1.到工作台 2.到文件 3.结束 ");
Scanner sc = new Scanner(System.in);
int flag = sc.nextInt();
while (flag == 1 || flag == 2) {
if (flag == 1) {
System.out.println(s);
System.out.println("请选择:");
} else if (flag == 2) {
TestWFile wb = new TestWFile();
wb.writeToFile(s);
System.out.println("请选择:");
} else
return;
flag = sc.nextInt();
}
System.out.println("结束程序.");
}
}
/*
* public static void main(String[] args) { printWaterNumber(1, 1000000);
*
* }
*/
自己感觉写的还行。有不足的地方请哪位高手指点指点,万分感谢