以下搜集了关于Java基础的一些练习,来巩固对Java的理解。
1、求三个数的最大公约数和最小公倍数。
首先要明确最大公约数和最小公倍数的概念。
最大公约数:
最大公因数,也称最大公约数、最大公因子,指两个或多个整数共有约数中最大的一个。
最小公倍数:
两个或多个整数的公倍数里最小的那一个叫做它们的最小公倍数。
思路:
先分析最大公约数。比如4和6,最大公约数是2,4/2 = 0和6/2=0同时成立,那么可以使用for循环,从1开始除,一直除到最小的数4。
代码:
/*
* 这个类里面的方法全部为静态的
*/
public class MethodsUtil {
// 求最大公约数
public static int getMaxDivisor(int a, int b, int c) {
// 这个变量用来接收公约数
int divisor = 0;
// 获取给定参数中的最小值
int min = Math.min(Math.min(a, b), c);
for (int i = 1; i <= min; i++) {
if (a % i == 0 && b % i == 0 && c % i == 0) {
// 不断更新公约数的值,那么最后一个是最大的公约数
divisor = i;
}
}
return divisor;
}
}
测试:
public static void main(String[] args) {
int res = MethodsUtil.getMaxDivisor(9, 18, 999);
System.out.println("9、18、999的最大公约数是:" + res);
int res2 = MethodsUtil.getMaxDivisor(7, 18, 42);
System.out.println("7、18、42的最大公约数是:" + res2);
int res3 = MethodsUtil.getMaxDivisor(15, 40, 100);
System.out.println("15、40、100的最大公约数是:" + res3);
}
然后看最小公倍数:比如4和5的最小公倍数是4*5=20,2和4的最小公倍数是4,使用for循环,从最小的数除起,最大的数是两个数的乘积。
代码:
// 求最小公倍数
public static int getMinMultiple(int a, int b, int c) {
int multiple = 0;
// 获取给定参数中的最小值
int min = Math.min(Math.min(a, b), c);
// 除数的最大值
int max = a * b * c;
for (int i = min; i <= max; i++) {
if (i % a == 0 && i % b == 0 && i % c == 0) {
multiple = i;
// 最小公倍数找到,可以直接跳出了
break;
}
}
return multiple;
}
测试:
public static void main(String[] args) {
int res = MethodsUtil.getMinMultiple(2, 4, 8);
System.out.println("2、4、8的最小公倍数是:" + res);
int res2 = MethodsUtil.getMinMultiple(4, 5, 7);
System.out.println("4、5、7的最小公倍数是:" + res2);
int res3 = MethodsUtil.getMinMultiple(14, 5, 7);
System.out.println("14、5、7的最小公倍数是:" + res3);
}
控制台:
对于n个数的最小公倍数、最大公约数,可以仿照此方法改进,原理相同。
2、用户输入一个数字,控制台反转这个数字之后,返回给用户。
思路:
可以考虑StringBuilder提供的reserve方法,有其他的方法,这里我就用这种了。
代码:
// 反转一个数字
public static long reserveNumber(long a) {
// 先转为String
String res = Long.toString(a);
StringBuilder sb = new StringBuilder(res);
// 反转
sb.reverse();
// 再转回int
Long result = Long.parseLong(sb.toString());
return result;
}
测试:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个数字:");
if (sc.hasNextLong()) {
long res = sc.nextLong();
System.out.println("输入的数字是:" + res);
// 反转
long res2 = MethodsUtil.reserveNumber(res);
System.out.println("该数反转后是:" + res2);
}
}
3、从控制台接收一个字符串,将字符串中的大写字母转为小写,小写字母转为大写。
思路:
直接使用包装类Character提供的方法即可实现。
代码:
// 字符串中的大写字母转小写,小写转为大写
public static String transferLetter(String s) {
// 将串转为字符数组
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
// 判断字符是不是大写字母
if (Character.isUpperCase(chs[i])) {
chs[i] = Character.toLowerCase(chs[i]);
} else if (Character.isLowerCase(chs[i])) {
chs[i] = Character.toUpperCase(chs[i]);
}
}
// 重新构建字符串
String res = new String(chs);
return res;
}
测试:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个串:");
if (sc.hasNext()) {
String res = sc.next();
System.out.println("输入的原串是:" + res);
// 转换
String res2 = MethodsUtil.transferLetter(res);
System.out.println("转换后的新串是:" + res2);
}
}
4、输入5个整数x,y,z,m,n,请把这5个数由小到大输出。 例如输入:1,3,2,4,6 输出 1,2,3,4,6。
思路:
考虑使用数组来实现。
代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
Integer[] nums = new Integer[5];
for (int i = 1; i <= 5; i++) {
System.out.println("请输入第" + i + "个数:");
if (sc.hasNextInt()) {
nums[i - 1] = sc.nextInt();
}
}
// 排序
Arrays.sort(nums);
System.out.println("升序排列:");
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i] + "\t");
}
}
5、控制台接收5个人的成绩,学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示,输出5个人的成绩等级,控制台只允许接收0-100之间的分数。
思路:
考虑使用循环加条件语句来实现。
代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int i = 1;
boolean tag = true;
do {
System.out.println("请输入第" + i + "个同学的成绩:");
if (sc.hasNextInt()) {
int res = sc.nextInt();
if (res < 0 || res > 100) {
System.out.println("成绩不合法,请重新输入!");
} else {
i++;
if (res < 60) {
System.out.println("该同学的成绩为C等!");
} else if (res < 90) {
System.out.println("该同学的成绩为B等!");
} else {
System.out.println("该同学的成绩为A等!");
}
}
}
if (i > 5) {
tag = false;
}
} while (tag);
}
6、输入一行字符,分别统计出其英文字母、空格、数字和其它字符的个数。
思路:
考虑使用包装类Character来实现,但是注意,控制台允许输入空格的。
代码:
// 统计字符串中英文字母、空格、数字和其它字符的个数。
public static void count(String s) {
int letter = 0, whiteSpace = 0, digit = 0, others = 0;
// 转为字符数组
char[] chs = s.toCharArray();
for (int i = 0; i < chs.length; i++) {
if (Character.isLetter(chs[i])) {
letter++;
} else if (Character.isWhitespace(chs[i])) {
whiteSpace++;
} else if (Character.isDigit(chs[i])) {
digit++;
} else {
others++;
}
}
System.out.println("输入串的长度为:" + s.length());
System.out.println("其中字母个数:" + letter);
System.out.println("其中空格个数:" + whiteSpace);
System.out.println("其中数字个数:" + digit);
System.out.println("其它字符个数:" + others);
}
测试:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("请输入一个字符串:");
if (sc.hasNextLine()) {
String res = sc.nextLine();
MethodsUtil.count(res);
}
}
执行:
24 + 3 + 15 + 3 = 45没错,注意,汉字它是当做字母处理的。
7、图形打印输出,控制台打印下面几个图形。
*
***
*****
*******
思考:
使用3层循环,最外层控制行数,里面两层控制打印空格和星号。
第1行:3个空格1个星号。
第2行:2个空格3个星号。
第3行:1个空格5个星号。
第4行:0个空格7个星号。
规律是:第i行,2i-1个星号,4-i个空格。
代码:
public static void main(String[] args) {
for (int i = 1; i <= 4; i++) {
// 控制行数
for (int j = 4 - i; j > 0; j--) {
// 先输出空格
System.out.print(" ");
}
for (int k = 2 * i - 1; k > 0; k--) {
// 然后输出星号
System.out.print("*");
}
System.out.println();
}
}
*******
*****
***
*
思路:
使用3层for循环实现。
第1行:0个空格7个星号。
第2行:1个空格5个星号。
第3行:2个空格3个星号。
第4行:3个空格1个星号。
规律:第i行,i-1个空格,9-2i个星号。
代码:
public static void main(String[] args) {
for (int i = 1; i <= 4; i++) {
// 控制行数
for (int j = i - 1; j > 0; j--) {
// 先输出空格
System.out.print(" ");
}
for (int k = 9 - 2 * i; k > 0; k--) {
// 然后输出星号
System.out.print("*");
}
System.out.println();
}
}
*
***
*****
*******
*****
***
*
思路:
拆分成上下两个部分,上面4行,下面3行,和刚才的差不多。
上面不变,下面稍微变一下:
第1行:1个空格5个星号。
第2行:2个空格3个星号。
第3行:3个空格1个星号。
规律:第i行,i个空格,7-2i个星号。
代码:
public static void main(String[] args) {
for (int i = 1; i <= 4; i++) {
// 控制行数
for (int j = 4 - i; j > 0; j--) {
// 先输出空格
System.out.print(" ");
}
for (int k = 2 * i - 1; k > 0; k--) {
// 然后输出星号
System.out.print("*");
}
System.out.println();
}
for (int i = 1; i <= 3; i++) {
// 控制行数
for (int j = i; j > 0; j--) {
// 先输出空格
System.out.print(" ");
}
for (int k = 7 - 2 * i; k > 0; k--) {
// 然后输出星号
System.out.print("*");
}
System.out.println();
}
}
*
**
***
****
*****
思路:
两层循环就行了,比较简单。
规律:第i行,i个星号。
代码:
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
// 控制行数
for (int j = i; j > 0; j--) {
System.out.print("*");
}
System.out.println();
}
}
*****
****
***
**
*
思路:
两层循环。规律:第i行,6-i个星号。
代码:
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
// 控制行数
for (int j = 6 - i; j > 0; j--) {
System.out.print("*");
}
System.out.println();
}
}
*
**
***
****
*****
****
***
**
*
拆分为上下两个部分,这里直接写了。
代码:
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
// 控制行数
for (int j = i; j > 0; j--) {
System.out.print("*");
}
System.out.println();
}
for (int i = 1; i <= 4; i++) {
// 控制行数
for (int j = 5 - i; j > 0; j--) {
System.out.print("*");
}
System.out.println();
}
}
*
* *
* *
* *
* *
* *
* *
* *
*
思路:分为上下两个部分。
上半部分:
第1行:4个空格,1个星号。
第2行:3个空格,1个星号,1个空格,1个星号。
第3行:2个空格,1个星号,3个空格,1个星号。
第4行:1个空格,1个星号,5个空格,1个星号。
第5行:0个空格,1个星号,7个空格,1个星号。
规律:第1行特殊处理,其他4行:第i行,5-i个空格,1个星号,2i-3个空格,1个星号。
代码:
for (int i = 1; i <= 5; i++) {
// 控制行数
for (int j = 5 - i; j > 0; j--) {
// 先打空格
System.out.print(" ");
}
System.out.print("*");// 打1个星号
if (i == 1) {
System.out.println();
continue;
}
for (int k = 2 * i - 3; k > 0; k--) {
// 再打空格
System.out.print(" ");
}
System.out.print("*");// 打1个星号
System.out.println();
}
效果:
下半部分:
第1行:1个空格,1个星号,5个空格,1个星号。
第2行:2个空格,1个星号,3个空格,1个星号。
第3行:3个空格,1个星号,1个空格,1个星号。
第4行:4个空格,1个星号。
规律:第4行特殊处理,其他行:第i行,i个空格,1个星号,7-2i个空格,1个星号。
代码:
for (int i = 1; i <= 4; i++) {
// 控制行数
for (int j = i; j > 0; j--) {
// 先打空格
System.out.print(" ");
}
System.out.print("*");// 打1个星号
if (i == 4) {
System.out.println();
break;
}
for (int k = 7 - 2 * i; k > 0; k--) {
// 再打空格
System.out.print(" ");
}
System.out.print("*");// 打1个星号
System.out.println();
}
public static void main(String[] args) {
for (int i = 1; i <= 5; i++) {
// 控制行数
for (int j = 5 - i; j > 0; j--) {
// 先打空格
System.out.print(" ");
}
System.out.print("*");// 打1个星号
if (i == 1) {
System.out.println();
continue;
}
for (int k = 2 * i - 3; k > 0; k--) {
// 再打空格
System.out.print(" ");
}
System.out.print("*");// 打1个星号
System.out.println();
}
for (int i = 1; i <= 4; i++) {
// 控制行数
for (int j = i; j > 0; j--) {
// 先打空格
System.out.print(" ");
}
System.out.print("*");// 打1个星号
if (i == 4) {
System.out.println();
break;
}
for (int k = 7 - 2 * i; k > 0; k--) {
// 再打空格
System.out.print(" ");
}
System.out.print("*");// 打1个星号
System.out.println();
}
}
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
* * * * * * * * * *
注意,是1个星号1个空格,打印10行,每行10个星号。
代码:
public static void main(String[] args) {
for (int i = 1; i <= 10; i++) {
// 控制行数
for (int j = 1; j <= 10; j++) {
System.out.print("* ");
}
System.out.println();
}
}
8、打印9x9乘法口诀表。
思路:两个for循环即可实现。
代码:
public static void main(String[] args) {
for (int i = 1; i <= 9; i++) {
// 控制行数
for (int j = 1; j <= i; j++) {
System.out.print(j + "x" + i + "=" + (i * j) + " ");
}
System.out.println();
}
}
9、给一个不多于5位的正整数,要求:
一、求它是几位数。
二、逆序打印出各位数字。
代码:
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
boolean tag = true;
System.out.println("请输入一个不超过5位的整数:");
do {
if (sc.hasNextInt()) {
int res = sc.nextInt();
String s = Integer.toString(res);
if (s.length() > 5) {
System.out.println("数字位数超过了5位,请重新输入!");
} else {
System.out.println("输入的是" + s.length() + "位数!");
StringBuilder sb = new StringBuilder(s);
sb.reverse();
System.out.println("你输入的是:" + s + ",反转后是:" + sb.toString());
tag = false;
}
}
} while (tag);
}
10、有一个已经升序排好序的数组。现输入3个数,要求按原来的规律将它们插入数组中。
代码:
public static void main(String[] args) {
int[] num = {
1, 3, 34, 45, 67, 567, 697 };
System.out.println("原数组如下:");
for (int i = 0; i < num.length; i++) {
System.out.print(num[i] + "\t");
}
System.out.println();
System.out.println("------------------------------------------------------");
// 数组扩容3位
int[] num2 = Arrays.copyOf(num, num.length + 3);
Scanner sc = new Scanner(System.in);
for (int i = 1; i <= 3; i++) {
System.out.println("请输入第" + i + "个整数:");
if (sc.hasNextInt()) {
int res = sc.nextInt();
// 扩容后的默认元素是0,用输入的数代替
num2[num2.length - i] = res;
}
}
// 数组排序
Arrays.sort(num2);
System.out.println("新的数组如下:");
for (int i = 0; i < num2.length; i++) {
System.out.print(num2[i] + "\t");
}
}
11、将一个数组逆序输出。
用反转排序算法就可以了。
代码:
// 数组反转
public static int[] reserveArray(int[] nums) {
for (int i = 0; i < nums.length / 2; i++) {
// 元素交换
int temp = nums[nums.length - 1 - i];
nums[nums.length - 1 - i] = nums[i];
nums[i] = temp;
}
return nums;
}
测试:
public static void main(String[] args) {
int[] num = {
1, 3, 34, 45, 67, 567, 697 };
System.out.println("原数组如下:");
for (int i = 0; i < num.length; i++) {
System.out.print(num[i] + "\t");
}
System.out.println();
System.out.println("----------------------------------------");
// 反转
MethodsUtil.reserveArray(num);
System.out.println("反转后的数组如下:");
for (int i = 0; i < num.length; i++) {
System.out.print(num[i] + "\t");
}
}
12、取一个整数a从右端开始的4~7位。
使用字符串中的substring方法截取就可以了。注意的是,这个整数至少有7位,而且截取是从右边开始的,那么索引位应该是:a.length-7到a.length-4,这样的话最后一位取不到,所以应该是a.length-7到a.length-3。
代码:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
boolean tag = true;
do {
System.out.println("请输入一个至少7位的整数:");
if (in.hasNextLong()) {
long res = in.nextLong();
String s = Long.toString(res);
if (s.length() < 7) {
System.out.println("数字的位数不够7位,请重新输入!");
} else {
// 开始截取
String result = s.substring(s.length() - 7, s.length() - 3);
System.out.println("原数字是:" + s);
System.out.println("截取后的数字是:" + result);
tag = false;
}
}
} while (tag);
}
13、给定数组,最大元素与第一个元素交换,最小元素与最后一个元素交换,输出数组。
代码:
/*
* 数组中的最大元素和第一个元素交换位置,
* 最小元素 最小元素和最后一个元素交换位置
*/
public static void changeLocation(int[] nums) {
// 复制一份数组
int[] nums2 = Arrays.copyOf(nums, nums.length);
// 排序获取最大、最小值
Arrays.sort(nums2);
int max = nums2[nums2.length - 1];
int min = nums2[0];
// 获取最大值和最小值的索引
int max_index = getIndexFromArray(nums, max);
int min_index = getIndexFromArray(nums, min);
// 交换最大值和第一个元素
int temp = nums[0];
nums[0] = nums[max_index];
nums[max_index] = temp;
// 交换最小值和最后一个元素
int temp2 = nums[nums.length - 1];
nums[nums.length - 1] = nums[min_index];
nums[min_index] = temp2;
}
// 定义一个私有方法,获取数组中元素的下标值
private static int getIndexFromArray(int[] nums, int value) {
for (int i = 0; i < nums.length; i++) {
if (nums[i] == value) {
return i;
}
}
return -1;
}
测试:
public static void main(String[] args) {
int[] num = {
132, 23, 54, 65, 8, 10, 435, 4563, 212 };
System.out.println("原数组如下:");
for (int i = 0; i < num.length; i++) {
System.out.print(num[i] + "\t");
}
System.out.println();
System.out.println("-------------------------------------");
// 数组元素交换
MethodsUtil.changeLocation(num);
System.out.println("交换后的数组如下:");
for (int i = 0; i < num.length; i++) {
System.out.print(num[i] + "\t");
}
}
14、计算字符串中子串出现的次数。
思路:
将原字符串中的子串用空符替换掉,然后用原串长度减去新串长度,再除以子串的长度。
代码:
// 统计字符串中子串出现的次数
public static int countTwice(String str, String s) {
// 子串用空符替换
String res = str.replaceAll(s, "");
int count = (str.length() - res.length()) / s.length();
return count;
}
测试:
public static void main(String[] args) {
String s = "dabkyczlkashqyczasldlayczawldayczakdafycz88宏大的ycz";
int count = MethodsUtil.countTwice(s, "ycz");
System.out.println("子串ycz一共出现了:" + count + "次");
}
15、有五个学生,每个学生有3门课的成绩
从键盘输入以上数据(包括学生号,姓名,三门课成绩)
计算出平均成绩,将原有的数据和计算出的平均分数存放在桌面的"student.txt"中。
代码:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
for (int i = 1; i <= 5; i++) {
System.out.println("开始录入第" + i + "个学生的成绩!");
System.out.println("请输入第" + i + "个学生的姓名:");
if(in.hasNext()) {
String name = in.next();
System.out.println("请输入第" + i + "个学生的学号:");
String code = in.next();
System.out.println("请输入第" + i + "个学生的语文成绩:");
int chinese = in.nextInt();
System.out.println("请输入第" + i + "个学生的数学成绩:");
int math = in.nextInt();
System.out.println("请输入第" + i + "个学生的英语成绩:");
int english = in.nextInt();
int avg = Math.round((chinese + math + english) / 3);
sb.append("姓名:").append(name).append(",").append("学号:").append(code)
.append(",").append("语文:").append(chinese).append(",")
.append("数学:").append(math).append(",")
.append("英语:").append(english).append(",平均成绩:").append(avg).append("\n");
}
}
//开始写入内容
File file = new File("F:/Users/Administrator/Desktop/student.txt");
if(!file.exists()) {
try {
file.createNewFile();
//写入的内容转为字节数组
byte []bys = sb.toString().getBytes("utf-8");
OutputStream os = new FileOutputStream(file);
os.write(bys);
System.out.println("写入完毕,请查看文件!");
os.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
控制台:
控制台提示写完了,查看桌面:
查看这个文件:
没问题,最后一个的成绩不小心输的有问题,但是不影响结果,懒得改了。
16、用 while 循环,计算 1~200 之间所有 3 的倍数之和。
挺简单,直接上代码:
public static void main(String[] args) {
int sum = 0;
int i = 1;
int res = 0;
System.out.println("3的倍数如下:");
while (i <= 200) {
if (i % 3 == 0) {
res++;
System.out.print(i + "\t");
sum += i;
if (res % 10 == 0) {
System.out.println();
}
}
i++;
}
System.out.println();
System.out.println("1到200之间所有3的倍数之和为:" + sum);
}
17、已知 XYZ+YZZ=532,其中,X、Y、Z 为数字,编程求出 X、Y 和 Z 的值。
思路:
像解方程那样:X + Y = 5,Y + Z = 3,Z + Z =2,同时满足这三个条件。
代码:
public static void main(String[] args) {
for (int x = 0; x <= 5; x++) {
for (int y = 0; y <= 3; y++) {
for (int z = 0; z <= 2; z++) {
if (x + y == 5 && y + z == 3 && z + z == 2) {
System.out.println("X的值是:" + x);
System.out.println("Y的值是:" + y);
System.out.println("Z的值是:" + z);
}
}
}
}
}
18、一个猜拳游戏,从控制台输入石头、剪刀、布,后台随机生成对应和输入的做比较,看看谁能赢,输,和平局。
考虑用随机数,生成3个数分别代表剪刀、石头、布。
代码:
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
Random ran = new Random();
// 随机生成0,1,2
// 制定规则:0代表石头,1代表剪刀,2代表布
for (int i = 1; i <= 10; i++) {
int res = ran.nextInt(3);
System.out.println("请输入0、1、2三个数字中的一个:");
if (in.hasNextInt()) {
int res2 = in.nextInt();
if (res == 0) {
if (res2 == 0) {
System.out.println("系统出的是石头,你出的也是石头,第" + i + "轮平局!");
} else if (res2 == 1) {
System.out.println("系统出的是石头,你出的是剪刀,第" + i + "轮你输了!");
} else if (res2 == 2) {
System.out.println("系统出的是石头,你出的是布,第" + i + "轮你赢了!");
}
}
if (res == 1) {
if (res2 == 0) {
System.out.println("系统出的是剪刀,你出的是石头,第" + i + "轮你赢了!");
} else if (res2 == 1) {
System.out.println("系统出的是剪刀,你出的也是剪刀,第" + i + "轮平局!");
} else if (res2 == 2) {
System.out.println("系统出的是剪刀,你出的是布,第" + i + "轮你输了!");
}
}
if (res == 2) {
if (res2 == 0) {
System.out.println("系统出的是布,你出的是石头,第" + i + "轮你输了!");
} else if (res2 == 1) {
System.out.println("系统出的是布,你出的是剪刀,第" + i + "轮你赢了!");
} else if (res2 == 2) {
System.out.println("系统出的是布,你出的也是布,第" + i + "轮平局!");
}
}
}
}
}
控制台:
其实在用户输入数字的时候应该做一下判断,如果用户输入的数不是0、1、2中的任何一个,应该处理的,这里没判断,应该要加,这样更严谨。
19、打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。(例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。)
代码:
public static void main(String[] args) {
// 百位不能是0
for (int i = 1; i <= 9; i++) {
// 十位和各位可以是0
for (int j = 0; j <= 9; j++) {
for (int k = 0; k <= 9; k++) {
if (i * i * i + j * j * j + k * k * k == i * 100 + j * 10 + k) {
System.out.println("水仙花数:" + (i * 100 + j * 10 + k));
}
}
}
}
}
20、将一个正整数分解质因数。例如:输入90,打印出90=2 * 3 * 3 * 5。
代码:
// 分解质因数
public static String resolveNum(int a) {
StringBuilder sb = new StringBuilder();
for (int i = 2; i <= a; i++) {
if (a % i == 0) {
sb.append(i).append(" * ");
a /= i;
i--;
}
}
// 删除最后几个多余的字符
sb.delete(sb.length() - 3, sb.length() - 1);
return sb.toString();
}
测试:
public static void main(String[] args) {
System.out.println("80 = " + MethodsUtil.resolveNum(80));
}