java - 无法生成某个范围内的所有卡普雷卡数

标签 java algorithm

虽然问题看起来很简单,但它是:-

卡普雷卡数是一个具有 d 位数字的正整数 n,这样当我们将其正方形分成两部分时 - 具有 d 位数字的右手部分 r 和包含剩余 d 或 d−1 的左手部分 l数字,各部分之和等于原始数字(即 l + r = n)。 任务 给定两个正整数 p 和 q,其中 p 小于 q。编写一个程序来确定 p 和 q(包括两者)之间的范围内有多少个 Kaprekar 数,并将它们全部显示出来。

输入格式

将有两行输入:p、最低值 q、最高值

限制:

0<p<q<100000

输出格式

输出给定范围内的每个 Kaprekar 数,在一行上以空格分隔。如果给定范围内不存在 Kaprekar 数字,则打印 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");
        }
    }
}

最佳答案

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");}

} }

关于java - 无法生成某个范围内的所有卡普雷卡数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29845220/

相关文章:

java - java 中的 org/codehaus/groovy/control/CompilationFailedException

algorithm - SSN 的校验和

algorithm - Dijkstra算法会陷入死胡同吗?

algorithm - 希尔伯特曲线通过一个点需要多少次迭代?

python - 用 python 解决困惑的单词拼图?

c - 两个连续质数之间的最大差值

Java/Groovy 泛型类型推断

java - 无法在 JAVA 中使用 GMAIL api 获取前 10 条消息?

java - 从非 Android 设备查找和 Android NSD 服务

java - "bitmap size exceeds 32bits"在 KitKat 设备上的 buildDrawingCache