我的代码未显示kaprekar号所需的结果

时间:2019-06-22 15:09:49

标签: java numbers

我全力以赴,但无法弄清楚编写程序的方法,该程序仅使用2个函数int countdDigits(int)和void check来确定数字是否为kaprekar (int)除了main()以外,显示正确的结果

import java.util.*;
class kaprekar
{
    private int countDigit(int a)
    {
        int count = 0;
        while(a>0)
        {
            a/=10;
            ++count;
        }
        return count;
    }
    private void check(int n)
    {
        int a = countDigit(n);
        int d = (int)Math.pow(10, a);
        int sum = (a/d) + (a%d);
        if(n==sum)
            System.out.println("It is a kaprekar number");
        else
            System.out.println("It is not a kaprekar number");
    }
    public static void main()
    {
        Scanner sc=new Scanner(System.in);
        kaprekar ob=new kaprekar();
        System.out.println("Enter a number to check");
        int num = sc.nextInt();
        ob.check(num);
    }
}

所需结果:

  

输入要检查的号码
  45
  这是一个kaprekar号码

实际结果:

  

输入要检查的号码
  45
  不是卡普雷卡编号

2 个答案:

答案 0 :(得分:1)

我认为您的问题在这里

int a = countDigit(n);
int d = (int)Math.pow(10, a);
int sum = (a/d) + (a%d);

您将位数除以d。我认为您需要将n除以d,而不是a。

答案 1 :(得分:0)

对于Kaprekar,您必须检查所讨论的平方数的总和是否与数字相同。

例如45->45²= 2025-> 20 + 25 = 45

以下应该做:

import java.util.Scanner;
public class KaprekarCheck {


    private static boolean isKaprekar(int n)
    {
        String square = Long.toString(n*n);
        for (int i=1; i< square.length(); i++) {
          System.out.println("i="+i+" len="+square.length());

             int num1 = Integer.parseInt(square.substring(0, i));

             int num2 = Integer.parseInt(square.substring(i, square.length()));
          System.out.println("i="+i+" len="+square.length()+" num1="+num1+" num2="+num2);
             if (num1+num2==n) {
                  return true;
             }
         }
         return false;
    }

    public static void main(String[] args) {
        int num = 9;

        if(isKaprekar(num)) 
            System.out.println("It is a kaprekar number");
        else
            System.out.println("It is not a kaprekar number");
    }
}