2013-11-21 50 views
-2

所以。我寫了一段代碼來執行一個程序,只是爲了確認一個數字是不是一個快樂的數字。但它不適用於任何數字,除了10的權力。請你指出問題.. 是的,它編譯好。開心號碼錯誤

while(true) 
    { 
     while (num>0) 
     { 
      dig=num%10; 
      sum=sum+(dig*dig); 
      num=num/10; 
     } 
     num=sum; 
     if(num==1) 
     System.out.println("Happy"); 
     break; 
    } 

}}

+0

這是什麼語言? – geoffspear

+0

聽起來像java? :D – erbdex

回答

1

你的算法似乎是有缺陷的。首先,你不會發現不愉快的數字。

Wikipedia's page on happy numbers

一個快樂的數量由以下過程定義:任何正整數開始,通過其數字的平方和更換號碼,直到數等於重複上述過程1(它將停留在那裏),,或者它在不包含1的循環中循環不休地循環。這個過程以1結尾的數字是開心數字,而那些不以1結尾的數字是不愉快的數字(或傷心號)。

(重點煤礦)

翻譯:你必須直到你最終你認識到作爲一個週期的一部分價值,重複上述過程。如果這個值是1,那麼這個數字是很高興的。如果不是,並且你沒有發現,你會最終循環。

1

首先,你不重置總和爲零。

此外,任何不開心的號碼將無限循環。

+0

我甚至沒有注意到'sum'從未在循環中初始化的事實。 +1 – cHao

+0

如果我記得,您可以確定一個有限集合中的非快樂數字,因爲集合中的所有數字都以相同的數字序列結束。 – user3010805

0

使用此功能會找到你快樂,悲傷數字

#include <cmath> 
long fun(long); 

long func(long x) 
{ 
long sum=0,rem; 
while(x>0) 
{ 
    num=x%10; 
    sum=sum+pow(rem,2); 
    x=x/10; 
} 
if(sum>=10) 
    func(sum); 
else 
return sum; 
}