2012-07-29 77 views
0
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,如果它不設置初始值是一樣的結果,並重復整個過程。 如果號碼不滿意,應該發生無限循環。 但是,沒有發生這種情況,有誰知道如何使這項工作?快樂數檢查不正確

+1

該代碼是否爲您編譯?你必須將return語句放在'if'或if-else'子句後面 – bontade 2012-07-29 18:48:04

+0

如果你必須檢查一個像78這樣的數字,會發生什麼?下一個數字是49 + 64 = 113.當你檢查113時,你的代碼是做什麼的?在這種情況下't'和'u'的值是多少? (最好使用'ten'和'units'作爲變量名;儘早進入好習慣。) – rossum 2012-07-29 18:59:50

+0

[迭代通過數字中的每個數字]可能的重複(http://stackoverflow.com/questions/5009591/iterate-通過每個數字的數字) – Bernard 2012-07-29 19:02:41

回答

0

由於這是家庭作業我不是在回答把...但這裏是線索..

您還沒有處理3個數字好。

t=init%100-u計算到10%100-0 = 10

,一旦m=u2+t2m=0+100達到100和你的程序不處理3位數字。希望這可以幫助。

添加以下...

int h = init/100; 
int h2 = h * h; 
int m = u2+t2+h2; 

,它應該讓你去... :)

0

根據您鏈接的維基文章,你不得不重複數字相加的過程每個數字中的數字。對於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。但是你的程序,因爲你無法檢查你的程序,已經進入一個循環,將運行,直到你用完內存。

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)和存儲一個整數數組的結果更有效地進行。

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); 
    }