Не удалось создать все число Капрекара в диапазоне

Хотя проблема казалась простой, вот она:

Число Капрекара представляет собой положительное целое число n с d цифрами, так что когда мы разбиваем его квадрат на две части - правую часть с цифрами d и левую часть l, содержащую оставшиеся d или d? 1 цифры, сумма частей равна исходному числу (т. е. l + r = n). Задача Вам заданы два натуральных числа p и q, где p меньше q. Напишите программу для определения количества чисел Капрекара в диапазоне между p и q (оба включительно) и отобразите их все.

Формат ввода

Будут две строки ввода: p, наименьшее значение q, максимальное значение

Ограничения:

0<p<q<100000

Выходной формат

Выведите каждое число Капрекара в заданном диапазоне, разделенное пробелом на одной строке. Если в заданном диапазоне нет чисел Капрекара, напечатайте INVALID RANGE.

Я не мог очистить тестовые примеры в диапазоне

22223
99999

В приведенном выше диапазоне должны быть сформированы следующие числа: -

77778 82656 95121 99999

Вот мой код: -

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner scan = new Scanner(System.in);
        int p = scan.nextInt();
        int q = scan.nextInt();
        boolean exist = false;
        if(q <= p){
            System.out.println("INVALID RANGE");
        }
        int m = 0,n = 0;
        long sqr = 0;
        String numb = "";
        String[] digits = new String[2];
        for(int i = p; i <= q; i++){
            if(i == 1)System.out.print(1 + " ");
            else{
            sqr = i*i;
            numb = String.valueOf(sqr);// Changing it into a string.
            if(numb.length() % 2 == 0){
                digits[0] = numb.substring(0, numb.length()/2);//Splitting it into two parts
                digits[1] = numb.substring(numb.length()/2);
            }else{
                digits[0] = numb.substring(0, (numb.length() - 1)/2);
                digits[1] = numb.substring((numb.length() -1)/2);
            }
              if(digits[0] == "" )
                  m = 0;
              if(digits[1] == "")
                  n = 0;
              if(!digits[1].equals("") && !digits[0].equals("")){
              m = Integer.parseInt(digits[0]);
              n = Integer.parseInt(digits[1]);
              }  
            if(i == (m + n) ){ //Testing for equality
                System.out.print(i + " ");
                exist = true;
            }
        }
      }
        if(exist == false){// If exist is never modified print Invalid Range.
            System.out.println("INVALID RANGE");
        }
    }
}

java,algorithm,

2

Ответов: 3


2
import java.util.*;
public class Kaprekar
{
public static void main(String args[])
{
Scanner sc=new Scanner(System.in);
System.out.println("Enter a number");
int num=sc.nextInt(); 
int sq=num*num; String sq1=Integer.toString(sq);
int mid=(Integer.toString(sq).length())/2;
int rem=sq%((int)Math.pow(10,sq1.length()-mid));
int quo=sq/((int)Math.pow(10,sq1.length()-mid));
int sum=rem+quo;
if(sum==num)
{System.out.println("Kaprekar");}else{System.out.println("Not Kaprecar");}

}}


0 принят

Изменение типа индекса цикла i от int до долгого исправления проблемы.

Квадратное вычисление i * i переполняло верхний предел int, поэтому, изменив его на длинные, мы смогли получить требуемые вычисления.

Спасибо Rup за это.

Код, который очистил все тестовые примеры, находится здесь:

import java.io.*;
import java.util.*;

public class Solution {

    public static void main(String[] args) {
        /* Enter your code here. Read input from STDIN. Print output to STDOUT. Your class should be named Solution. */
        Scanner scan = new Scanner(System.in);
        int p = scan.nextInt();
        int q = scan.nextInt();
        boolean exist = false;
        if(q <= p){
            System.out.println("INVALID RANGE");
            return;
        }
        int m = 0,n = 0;
        long sqr = 0;
        String numb = "";
        String[] digits = new String[2];
        for(long i = p; i <= q; i++){
            if(i == 1)System.out.print(1 + " ");
            else{
            sqr = i*i;
            numb = String.valueOf(sqr);
            if(numb.length() % 2 == 0){
                digits[0] = numb.substring(0, numb.length()/2);
                digits[1] = numb.substring(numb.length()/2);
            }else{
                digits[0] = numb.substring(0, (numb.length() - 1)/2);
                digits[1] = numb.substring((numb.length() -1)/2);
            }
              if(digits[0] == "" )
                  m = 0;
              if(digits[1] == "")
                  n = 0;
              if(!digits[1].equals("") && !digits[0].equals("")){
              m = Integer.parseInt(digits[0]);
              n = Integer.parseInt(digits[1]);
              }  
            if(i == (m + n) ){ 
                System.out.print(i + " ");
                exist = true;
            }
        }
      }
        if(exist == false){
            System.out.println("INVALID RANGE");
        }
    }
}

0
import java.io.*;
import java.math.*;
import java.util.*;

class Kaprekar {

    public static void main(String[] args) {

        Scanner scanner = new Scanner(System.in);
        int p = scanner.nextInt();
        int q = scanner.nextInt();
        long i,n,s,a,c,k,d,e=0;

        for(i=p;i<=q;i++)
        { 
            k=i;d=0;
            while(k!=0)
            { 
                d++;
                k=k/10;
             }
            c=0;s=0;n=i*i;
            while(n!=0)
            {
                a=n%10;
                n=n/10;
                s=s+ (int)Math.pow(10,c)*a;
                c++;
                if(n+s==i&&(c==d||c==d-1)&&s!=0)
                { 
                    System.out.print(i+" ");
                    e++; break;
                }
              }
             }
        if(e==0)
        {
         System.out.println("INVALID RANGE");
         }
        scanner.close();
    }
}
Java, алгоритм,
Похожие вопросы
Яндекс.Метрика