探索水仙数的奥秘:为什么程序只输出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?详情请关注图灵教育的其他相关文章!
