文章目录
- 打好Java编程基础(拓展训练)
- 任务1、打印水仙花数
-
- 任务2、输出指定范围内的闰年
-
- 任务3、判断一个整数是不是素数
-
打好Java编程基础(拓展训练)
任务1、打印水仙花数
- 所谓水仙花数,是指等于其各位数字立方和的三位数
- 分析问题,首先水仙花数是三位数,那么我们可以确定范围:[100, 999],这个我们可以通过循环结构来搞定:
for (int n = 100; n <= 999; n++) {
...
}
- 然后对于这个范围的每个数n,我们要去判断它是否等于其各位数字的立方和,这里的难点或关键在于如何分解一个三位数,得到它的每位数字
- 假设我们已经把三位数n分解成百位数p3,十位数p2,个位数p1,这样我们的筛选条件就可以写出来:n == p3 * p3 * p3 + p2 * p2 * p2 + p1 * p1 * p1。
- 如何拆分一个三位数n(375)呢?
- 首先求n的个位数:n % 10 = 375 % 10 = 5
然后要将三位数变成两位数:n = n / 10 = 375 / 10 = 37;
对于新的两位数n,又求它的个位数:n % 10 = 37 % 10 = 7
然后要将两位数变成一位数:n = n / 10 = 37 / 10 = 3; - 我们可以交替使用求余和整除运算将一个三位数拆分,得到它的个位数、十位数和百位数。当然这个分解方法可以推广到任何多位数的拆分
(1)代码编写
public class t06 {
public static void main(String[] args) {
int x = 0; //定义水仙花数的个数
for(int i=100; i<=999; i++){
int a = i/100; //百位
int b = (i-100*a)/10; //十位
int c = (i-b*10-a*100); //个位
if(i == a*a*a+b*b*b+c*c*c){
x++;//每次符合水仙花数条件,则x+1;
System.out.println(i + " = " + a+"^3 + " + b +"^3 + "+ c+"^3"); //输出符合条件的数
}
}
System.out.println("水仙花数总共有"+x+"个"); //输出水仙花数的总数
}
}
(2)输出结果
任务2、输出指定范围内的闰年
- 输出[2000, 2500]内的全部闰年,要求每行输出5个年份
(1)代码编写
public class t07 {
public static void main(String[] args) {
//定义部分
int i=0;
int count = 0;
System.out.println("下列数字为【2000~2500】年中的闰年:");
//处理部分
for(i=2000;i<=2500;i++)
{
if(i%4==0&&i%100!=0)
{
System.out.print(i + "t");
//按五个一行输出
count++;
if (count % 5==0) System.out.println();
}
else if(i%400==0)
{
System.out.print(i + "t");
//按五个一行输出
count++;
if (count % 5==0) System.out.println();
}
}
}
}
(2)输出结果
任务3、判断一个整数是不是素数
(1)代码编写
import java.util.Scanner;
public class t08 {
public static void main(String[] args) {
int x;
Scanner sc = new Scanner(System.in);
boolean isPr;
System.out.print("输入一个整数:");
x = sc.nextInt();
isPr = true;
for (int i = 2; i <= Math.sqrt(x); i++) {
if (x % i == 0) {
isPr = false;//不是素数
break;//跳出循环
}
}
//对1单独处理
if (x == 1) {
System.out.println("1既不是素数,也不是合数。");
} else if (x > 1) {
if (isPr == true) {
System.out.println(x + "是素数。");
} else {
System.out.println(x + "不是素数。");
}
}
}
}
(2)输出结果