Мой код не отображает требуемый результат для числа капрекар - PullRequest
0 голосов
/ 22 июня 2019

Я применил весь свой мозг, но не могу понять, что делать для создания программы, которая выясняет, является ли число kaprekar или нет, используя только 2 функции int countdDigits (int) иvoid check (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
Этономер капрекара

фактические результаты:

Введите число для проверки
45
Это не номер капрекара

Ответы [ 2 ]

1 голос
/ 22 июня 2019

Я думаю, что ваша проблема здесь

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

Вы разделили количество цифр с помощью d. Я думаю, вам нужно разделить п с д, а не а.

0 голосов
/ 22 июня 2019

Для Капрекара вы должны проверить, совпадает ли сумма частей рассматриваемого квадратного числа с числом.

например, 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");
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...