Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

Java扩展水仙花数求解程序解析

阿贵
9月30日发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年09月30日,已超过12天没有更新,若内容或图片失效,请留言反馈。

Java扩展水仙花数求解程序解析

题目代码分析

136.png

以下是需要补全的Java代码,功能是寻找并保存指定范围内的扩展水仙花数(4位自幂数):

import java.util.Scanner;
import java.io.*;
public class Java_2 {
    int fourthPower(int n) {
    return n*n*n*n;
    }
    int narcissiExt(int fromNum,int number[]) {
    int i=0;
    int m=fromNum;
        int m1=m%10;
        int m2=(m/10)%10;
        int m3=(m/100)%10;        
        //**********Found**********
    int _________________;
        
        for(m=fromNum;m<=9999;m++) {
        int sum=fourthPower(m1)+fourthPower(m2)+fourthPower(m3)+fourthPower(m4);
            //**********Found**********
        if( _____________ ) {
                number[i]=m;
                //**********Found**********
        __________________;
        }
        m1=m1+1;
               if(m1==10) {
        m1=0;
                m2=m2+1;
        if(m2==10) {
                    //**********Found**********
            _______________;  
                    m3=m3+1;
            if(m3==10) {
                m3=0; 
                        m4=m4+1;
            }
            }
        }
    }
        return i;
    }
    
    public static void main(String[] args) throws Exception{
    Scanner input = new Scanner(System.in);
    System.out.println("Input a number:");
    int n = input.nextInt();
    input.close();
    int[] num= new int [10];
    int counter=new Java_2().narcissiExt(n,num);
        //**********Found**********
    PrintWriter pw=new  ____________________ ("java_2.txt");
    pw.print("There are "+counter+" extended Narcissistic numbers ");
    pw.println(" >= "+n+". They are:");
    for(int i=0;i<counter;i++) {
        pw.println(num[i]);
    }
        //**********Found**********
    ______________;
    }
}

空白处解析

  1. 第一个空白处int _________________;

    • 解析:程序处理的是4位自幂数,需要定义第四位数字的变量
    • 答案:m4 = (m / 1000) % 10
  2. 第二个空白处if( _____________ )

    • 解析:判断当前数字是否为自幂数(各位数字的4次方和等于该数本身)
    • 答案:sum == m
  3. 第三个空白处__________________;

    • 解析:找到符合条件的数字后,需要递增数组索引
    • 答案:i++
  4. 第四个空白处_______________;

    • 解析:处理数字进位,当m2达到10时应重置为0
    • 答案:m2 = 0
  5. 第五个空白处PrintWriter pw=new ____________________ ("java_2.txt");

    • 解析:创建文件输出流,需要实例化PrintWriter类
    • 答案:PrintWriter
  6. 第六个空白处______________;

    • 解析:使用完输出流后需要关闭以释放资源
    • 答案:pw.close()

完整正确代码

Java实现扩展水仙花数(4位自幂数)的查找与保存

自幂数是指一个n位数,它的每个位上的数字的n次幂之和等于它本身。例如,3位数的水仙花数是指各位数字的3次方和等于该数本身。本文将介绍如何使用Java寻找4位自幂数(扩展水仙花数)并将结果保存到文件中。

1. 程序功能概述

这个程序实现了以下功能:

  • 接收用户输入的起始数字
  • 查找从起始数字到9999之间的所有4位自幂数
  • 将查找结果保存到文本文件中

4位自幂数是指一个4位数,其各位数字的4次方之和等于该数本身。例如,1634 = 1⁴ + 6⁴ + 3⁴ + 4⁴。

2. 核心算法解析

2.1 计算数字的4次方

程序首先定义了一个辅助方法fourthPower,用于计算一个数字的4次方:

int fourthPower(int n) {
    return n * n * n * n;
}

这个方法简单直接,通过连续乘法实现4次方计算。

2.2 分解4位数字的各位

对于一个4位数字m,程序将其分解为个位、十位、百位和千位:

int m1 = m % 10;           // 个位数字:m除以10的余数
int m2 = (m / 10) % 10;    // 十位数字:m除以10后再取余10
int m3 = (m / 100) % 10;   // 百位数字:m除以100后再取余10
int m4 = (m / 1000) % 10;  // 千位数字:m除以1000后再取余10
2.3 自幂数判断逻辑

程序通过循环遍历所有4位数字,对每个数字进行判断:

int sum = fourthPower(m1) + fourthPower(m2) + fourthPower(m3) + fourthPower(m4);
if(sum == m) {
    number[i] = m;
    i++;
}

如果各位数字的4次方和等于该数字本身,则判定为4位自幂数,并将其存入数组。

2.4 数字进位处理

为了避免重复分解数字,程序采用了手动进位的方式更新各位数字:

m1 = m1 + 1;
if(m1 == 10) {
    m1 = 0;
    m2 = m2 + 1;
    if(m2 == 10) {
        m2 = 0;
        m3 = m3 + 1;
        if(m3 == 10) {
            m3 = 0; 
            m4 = m4 + 1;
        }
    }
}

这种方式模拟了数字的自然递增过程,提高了程序效率。

2.5 文件输出功能

程序使用PrintWriter类将结果写入文件:

PrintWriter pw = new PrintWriter("java_2.txt");
// 写入内容
pw.close();

使用完输出流后必须调用close()方法关闭,以确保数据正确写入文件。

3. 程序运行示例

当用户输入起始数字1000时,程序会找到所有4位自幂数:1634、8208、9474,并将结果写入java_2.txt文件:

There are 3 extended Narcissistic numbers  >= 1000. They are:
1634
8208
9474

4. 代码优化建议

这个程序可以从以下几个方面进行优化:

  1. 动态数组存储:使用ArrayList替代固定大小的数组,处理不确定数量的结果
  2. 通用化处理:修改程序使其能够处理任意位数的自幂数
  3. 输入验证:添加输入验证,确保用户输入的是有效的4位数字范围
  4. 异常处理:增加文件操作的异常处理,提高程序健壮性
  5. 算法优化:使用更高效的数字分解方法,避免手动进位的复杂逻辑

通过这个实例,我们学习了数字分解、循环控制、数组操作和文件IO等Java基础知识,同时也了解了自幂数的数学概念。这些知识在解决类似的数学问题和数据处理任务中非常有用。

喜欢就支持一下吧
点赞 1 分享 收藏
评论 抢沙发
OωO
取消 登录评论