java 100万 100 最大 选出_java 实现100万以内的水花仙数————我是初学者,大家多多支持 | 学步园...

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

*

* }

*/

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值