int Cnt(){
return Count (10);
}
int Count (int init){
int u = init % 10;
int t = (init % 100) - u;
int u2 = u * u;
int t2 = t * t;
int m = u2 + t2;
if(m <= 1)
System.out.println("Happy!");
else {
return Count (m);
}
此代码应(理论上)检查数字是否为Happy,如果未设置初始值与结果相同且整个过程重复。 如果数字不满意,应该会出现无限循环。 然而,这一切都没有发生,有谁知道如何使这项工作?
答案 0 :(得分:0)
由于这是作业,我没有回答......但这里有线索......
您没有很好地处理3位数字。
t=init%100-u
计算到10%100-0 = 10
并且一旦m=u2+t2
即m=0+100
到达100
,您的程序就无法处理3位数字。希望这可以帮助。
添加以下内容......
int h = init/100;
int h2 = h * h;
int m = u2+t2+h2;
它应该让你继续...:)
答案 1 :(得分:0)
根据您链接的Wiki文章,您必须重复对每个数字中数字的数字求和的过程。对于7的例子:
7^2 = 49
49 = 4^2 + 9^2 = 16 + 81 = 97
97 = 9^2 + 7^2 = 81 + 49 = 130
130 = 1^2 + 3^2 = 10
10 = 1^2 = 1
我发现您的代码存在一些问题。首先,你没有将你的十位数除以10,这意味着对于数字52,你会得到u = 2,而t = 50,而不是5.这部分,我相信你可以轻松修复。
其次,如果您的电话号码不满意,您似乎永远不会得出结论。例如,数字4,你将达到16,37,72,53,34,25,29,85,89,145,42,20,4。但你的程序,因为你无法检查你'我们进入了一个循环,直到你的内存耗尽为止。
答案 2 :(得分:0)
尝试使用您引用的article中列出的方法:
private static boolean isHappy(int number)
{
List<Integer> set = new ArrayList<Integer>();
while (number > 1 && !set.contains(number))
{
set.add(number);
number = sumSquaresOfDigits(number);
}
return number == 1;
}
private static int sumSquaresOfDigits(int number)
{
String numberString = Integer.toString(number);
int result = 0;
for (char character : numberString.toCharArray())
{
int digit = Character.digit(character, 10);
result += digit * digit;
}
return result;
}
通过计算所有10位数(0-9)的平方并将结果存储在整数数组中,可以更有效地完成此操作。
答案 3 :(得分:0)
import java.io.*;
class happy_no
{
void happy(double n)
{
int c=0;
double s=0;
double d,p,i,_sa;
for(i=1;i<=n;i++)
{
while(n!=0)
{
d=n%10;
p=d*d;
s=s+p;
n=n/10;
}
if(s==1)
{
System.out.println("HAPPY NO.");
break;
}
else
{
n=s;
}
}
}
public static void main()throws IOException
{
InputStreamReader read=new InputStreamReader(System.in);
BufferedReader in=new BufferedReader(read);
double a;
System.out.println("ENTER A NO.");
a=Double.parseDouble(in.readLine());
happy_no obj=new happy_no();
obj.happy(a);
}