我全力以赴,但无法弄清楚编写程序的方法,该程序仅使用2个函数int countdDigits(int)和void check来确定数字是否为kaprekar (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
这是一个kaprekar号码
实际结果:
输入要检查的号码
45
不是卡普雷卡编号
答案 0 :(得分:1)
我认为您的问题在这里
int a = countDigit(n);
int d = (int)Math.pow(10, a);
int sum = (a/d) + (a%d);
您将位数除以d。我认为您需要将n除以d,而不是a。
答案 1 :(得分:0)
对于Kaprekar,您必须检查所讨论的平方数的总和是否与数字相同。
例如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");
}
}