You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何判断自守数(Automorphic Number)的Java代码输出错误?

代码错误分析与修正

核心错误点

  • 平方计算错误:Java中^是按位异或运算符,不是幂运算,计算平方应该用x * x。如果x数值较大(比如超过46340),int类型存储平方会溢出,建议用long类型存储平方值。
  • 位数计算逻辑错误:原代码的for循环逻辑完全混乱,没有正确算出原数的位数。正确的做法是通过循环对原数取余、整除10来统计位数,或者直接把数字转成字符串取长度。
  • 判断逻辑错误:Math.pow返回double类型,用它做取余运算会有精度问题,且逻辑完全搞反——应该是取平方数的最后n位(n是原数的位数)和原数比较,而非原代码中的错误逻辑。

修正后的代码

import java.util.Scanner;

public class AutomorphicOrNot {
    public static void main(String[] args) {
        System.out.println("Enter a number:");
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        // 用long存储平方,避免int溢出
        long square = (long) x * x;
        // 通过字符串获取原数的位数
        int digitCount = String.valueOf(x).length();
        // 计算10的digitCount次方,用于截取平方数的最后n位
        long divisor = (long) Math.pow(10, digitCount);
        // 比较平方数的最后n位与原数
        if (square % divisor == x) {
            System.out.println("It is an automorphic number");
        } else {
            System.out.println("It is not an automorphic number");
        }
        sc.close();
    }
}

纯数字操作的位数计算方式(无需字符串)

如果不想用字符串处理,也可以用循环统计位数:

// 替换原代码中digitCount的计算部分
int temp = x;
int digitCount = 0;
// 处理非0数字的位数统计
while (temp != 0) {
    digitCount++;
    temp = temp / 10;
}
// 单独处理0的情况,0的位数为1
if (x == 0) {
    digitCount = 1;
}

内容的提问来源于stack exchange,提问作者apocalyptic

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 10:48:17