当前位置: 首页 > 图灵资讯 > 技术篇> 为什么我的水仙花数程序只输出153、370、371、407?

为什么我的水仙花数程序只输出153、370、371、407?

来源:图灵教育
时间:2025-03-14 16:29:32

探索水仙数的奥秘:为什么程序只输出153、370、371、407?

许多学生在编写寻找水仙花数量的程序时可能会遇到一些问题。水仙花的数量是指三位数或多位数,每个数字的立方和等于数字本身。例如,153是一个水仙花的数量,因为1³ + 5³ + 3³ = 1 + 125 + 27 = 153。 然而,当我们试图使用一些代码来寻找水仙花的数量时,结果出乎意料。

以下代码旨在寻找100-10000之间的所有水仙花数量:

import java.lang.math;
public class main {
    public static void main(string[] args) {
        int i;
        for( i=100;i<=10000;i++){
            if(i==fun(i))
                system.out.print(i+" ");  ///输出100-10000间水仙花
        }
    }
    public static double fun(int i){
        double k=0;
        while(i>0){
            k+=math.pow(i%10,3);
            i/=10;
        }
        return k;
    }
}

这个代码的问题在于fun函数的实现。它总是在不考虑数字位数变化的情况下,三次方求和每个数字的位数。 例如,对于四位数,应计算每位数的四次方和。

改进代码如下:

public class Main {
    public static void main(String[] args) {
        for (int i = 100; i <= 10000; i++) {
            if (i == fun(i)) {
                System.out.print(i + " "); // 水仙花输出100-10000间
            }
        }
    }

    public static int fun(int i) {
        int sum = 0;
        int n = i;
        int digitCount = (int)Math.log10(i) + 1; // 计算数字的位数
        while (n > 0) {
            int d = n % 10;
            sum += Math.pow(d, digitCount);
            n /= 10;
        }
        return sum;
    }
}

通过math修正后的fun函数.log10(i) + 1.计算数字的位数,以便正确计算每个数字的相应次力之和,最终正确输出100-10000之间的所有水仙花,包括153、370、371、407等符合条件的数字。 原代码之所以只输出这四个数字,是因为它错误地将所有数字视为三位数。

以上就是为什么我的水仙数程序只输出153、370、371、407?详情请关注图灵教育的其他相关文章!