如何修改Java代码实现数字各位平方和迭代至单非零位?
修改方案
要实现持续计算各位数字平方和直到结果为单个非零数字,你可以通过外层循环迭代或递归调用两种方式实现,以下是具体修改:
方式一:迭代循环(修改原方法)
直接在原findSum基础上增加外层循环,判断结果是否为单个数字(小于10),不满足则重复计算:
public static int findSum(int k) { int current = k; // 循环直到结果为单个非零数字 while (current >= 10) { int sum = 0; // 计算当前数字的各位平方和 while (current != 0) { sum += (current % 10) * (current % 10); current /= 10; } current = sum; } return current; } public static void main(String[] args) { System.out.println(findSum(19)); // 输出1 System.out.println(findSum(82)); // 输出1 System.out.println(findSum(713)); // 最终输出4 }
方式二:递归实现
拆分逻辑,用单独方法计算单次平方和,再通过递归持续调用直到得到单个数字:
// 计算单次各位平方和 public static int calculateSingleSum(int k) { int sum = 0; while (k != 0) { sum += (k % 10) * (k % 10); k /= 10; } return sum; } // 持续计算直到得到单个非零数字 public static int findSum(int k) { int result = calculateSingleSum(k); if (result >= 10) { return findSum(result); } return result; } public static void main(String[] args) { System.out.println(findSum(19)); // 输出1 System.out.println(findSum(82)); // 输出1 }
关键修改说明
- 核心是重复执行平方和计算,终止条件为结果小于10(单个非零数字)
- 迭代方式用外层循环控制流程,递归方式通过自身调用实现循环
- 自动处理含0的中间结果(如100会继续计算得到1)
内容的提问来源于stack exchange,提问作者Nutnicha
相关产品推荐
相关产品推荐

