现在的位置: 首页 > 综合 > 正文

java 实现100万以内的水花仙数————我是初学者,大家多多支持

2013年01月01日 ⁄ 综合 ⁄ 共 1932字 ⁄ 字号 评论关闭

求水花仙数无外乎两步: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);
  *
  * }
  */

自己感觉写的还行。有不足的地方请哪位高手指点指点,万分感谢

 

抱歉!评论已关闭.