頭條面試題:判斷一個數是不是happy number(每一位的平方和最終爲1)

朋友面試頭條二輪了,一輪的題目請看這一篇:頭條面試題:求用戶在線峯值和持續時間html

此次的面試題目是:判斷一個數是不是happy number(每一位的平方和最終爲1)git

知道題目首先要理解題目。所謂happy number就是一個整數每一個位數上的數字的平方相加,一直循環,若是最終能等於1,則就是happy number。面試

舉例:19app

第一次:1²=9²=82測試

第二次:8²+2²=68spa

第三次:6²+8²=100code

第四次:1htm

這樣的數就是happy number。blog

怎麼解決呢?這樣的問題能夠一直循環運算,發現等於1就是happy number,不等於就不是。我朋友就採起的是這種方法。但這種方法有個問題,若是不是happy number要何時中止循環進行判斷呢?由於不知道循環是不是重複的,或仍是無限不重複的循環。還有就是這種循環極容易溢出,因此最好的方法仍是要找出規律。get

如下就是個人線下手動運算,目的是找出規律:

 

 

 

從0~19的運算結果來看能夠得出如下結論:

1.0不是happy number;

2.全部happy number最終都能等於1;

3.全部不是happy number的數都是無限重複循環,且都從4開始循環。

 

得出了以上規律就能夠開始寫程序代碼了。

 計算平方和的方法:

public static int SumSquares(int number)
{
    var dic = new ArrayList();
    while (true)
    {
        dic.Add(number % 10);
        if (number / 10 == 0)
        {
            break;
        }

        number = number / 10;
    }
    var num = 0;
    foreach (var item in dic)
    {
        num += (int)item * (int)item;
    }
    return num;
}

 

判斷是不是Happy Number:

public static bool IsHappyNumber(int number)
{
    while (true)
    {
        if (number == 4)
            break;
        if (number == 1)
            return true;
        number = GetNumber(number);
    }
    return false;
}

 

最後在main方法中調用:

static void Main(string[] args)
{
    while (true)
    {
        Console.WriteLine("請輸入一個整數(輸入exit退出):");
        var writeText = Console.ReadLine();
        if (writeText == "exit")
            break;
        var number = Convert.ToInt32(writeText);
        bool isHappyNumber = IsHappyNumber(number);
        if (isHappyNumber)
            Console.WriteLine("輸入的是一個Happy Number!");
        else
            Console.WriteLine("輸入的不是一個Happy Number!");
        Console.WriteLine();
    }
    Console.ReadKey();
}

 測試:

 

 成功!!!

 項目下載地址:https://gitee.com/jingboweilanGO/happy-number.git

相關文章
相關標籤/搜索