虽然问题看起来很简单,但它是:-
卡普雷卡数是一个具有 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/