我设计了一个程序来输入一个数字并检查它是否满意。
import java.util.*;
public class isHappy
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
System.out.println("Enter number: ");
int n = sc.nextInt();
int l = String.valueOf(n).length();
int temp=n;
int midVar=0, addVar=0, i=0;
while (temp!=4)
{
midVar=0;
for (i=l; i>0; i--)
{
addVar = temp/Math.pow(10, i);
midVar+=Math.sqrt(addVar);
}
temp = midVar;
if (temp==1)
break;
}
if (temp==1)
{
System.out.println("Happy number");
}
else
{
System.out.println("Unhappy number");
}
}
}
我承认我使用的代码并不完全干净,但应该可以使用。它当然不应该产生输出2.是的,就是这样:用户输入数字后,程序只在下一行显示2。让我引导您完成执行过程。
Enter number: //program output 68 //user input 2 //program output
我必须补充一点,我确实在编译期间遇到了“可能的精度损失”错误,但我不相信它实际上可能是莫名其妙的输出中的一个因素。另外,我提出这个问题的主要目的不是为了获得如何修复我的代码的答案,而是解释为什么我得到上述奇怪的输出。
答案 0 :(得分:0)
根据wikipedia的快乐号码是:
happy number
是由以下过程定义的数字:
从任何正整数开始,将数字替换为其数字的平方和,并重复该过程,直到该数字等于1(它将保持不变),或者它在一个不包括的循环中无休止地循环1.
这个过程以1结尾的数字是幸福的数字,而那些不以1结尾的数字是不愉快的数字(或悲伤的数字)。
示例:
例如,19很高兴,因为相关的序列是:
1 ^ 2 + 9 ^ 2 = 82
8 ^ 2 + 2 ^ 2 = 68
6 ^ 2 + 8 ^ 2 = 100
1 ^ 2 + 0 ^ 2 + 0 ^ 2 = 1。
代码:获得快乐号码的一些修改。
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
System.out.println("Enter number: ");
int n = sc.nextInt();
int l = String.valueOf(n).length();
int temp = n;
int midVar = 0, addVar = 0, i = 0;
while (temp != 4) {
midVar = 0;
while (temp != 0) {
addVar = temp % 10;
temp = temp / 10;
midVar += Math.pow(addVar, 2);
}
temp = midVar;
System.out.println(midVar);
if (temp == 1) {
break;
}
}
if (temp == 1) {
System.out.println("Happy number");
} else {
System.out.println("Unhappy number");
}
}