java无法生成一个范围内的所有Kaprekar数
虽然问题似乎很简单,但问题是:-
Kaprekar数是一个正整数n和d位数,这样当我们把它的平方分成两部分时——一个右手部分r和d位数,另一个左手部分l包含剩余的d或d位数−1位,各部分之和等于原始数字(即l+r=n)。 任务 给出了两个正整数p和q,其中p小于q。编写一个程序来确定p和q之间(包括p和q)有多少Kaprekar数,并将它们全部显示出来
输入格式
将有两行输入:p、最低值q和最高值
限制条件:
0<p<q<100000
输出格式
输出给定范围内的每个Kaprekar数,空格分隔在一行上。如果给定范围内不存在Kaprekar编号,则打印无效范围
我无法清除范围内的测试用例
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");
}
}
}
共 (0) 个答案