java 有人能解释一下为什么这段代码显示错误的输出吗?Q-查找一个数字是否自守[重复]

kmb7vmvb  于 2023-06-28  发布在  Java
关注(0)|答案(1)|浏览(88)

此问题已在此处有答案

Is floating point math broken?(33答案)
3天前关闭。
定义:一个数被称为自守数,当且仅当它的平方结束于与该数本身相同的数字。
这是我为代码写的:

import java.util.*;
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();
        int n;
        int i;
        int t=x^2;
        
        for(i=1;i<t;i++)
        {
            t=t%10;
        }
        n=i;
        if((t%(Math.pow(10,n)))==x)
        {
           System.out.println("It is an automorphic number");
        }
        else
        {
           System.out.println("It is not an automorphic number");
        }
    }
}

从数学上讲,代码看起来是正确的。但是,我得到了错误的输出为相同的。例如,当我输入25时,我得到:它不是一个自守数。同样,其他条目也存在差异。
我最近刚开始学习编程。我希望你能帮我找出这个错误。谢谢你。

rkue9o1l

rkue9o1l1#

你有两个错误。

1. ^是按位XOR运算符。

它不是指数运算符。您需要Math.pow

2.循环。

for(i=1;i<t;i++)
{
  t=t%10;
}

这里你的目的是确定你的起始数有多少位,而不是你的平方数。相反,您应该将起始数字除以10,直到结果小于10。您还需要存储起始数字的副本,以便稍后将其与平方数的模数进行比较。

int x = sc.nextInt();
int i = 1;
int t = (int)(Math.pow(x, 2));
int n = x;

while(n >= 10)
{
  n /= 10;
  i++;
}

最后的结果看起来像这样,并指出25是一个自守数。

import java.util.*;
class HelloWorld {
    public static void main(String [] args)
    {
        System.out.println("Enter a number:");
        Scanner sc = new Scanner(System.in);
        int x = sc.nextInt();
        int i = 1;
        int t = (int)(Math.pow(x, 2));
        int n = x;
        
        while(n >= 10)
        {
            n /= 10;
            i++;
        }

        if((t % (Math.pow(10,i))) == x)
        {
           System.out.println("It is an automorphic number");
        }
        else
        {
           System.out.println("It is not an automorphic number");
        }
    }
}

相关问题