Алгоритм "happy number"

Алгоритм работает с однозначными, двухзначными и трёхзначными числами. Но трёх значные считываются, только когда заканчиваются на ноль. Например: 110, 100, 180 итд. Ка сделать так чтобы считывались еще и трёхзначные числа, заканчивающиеся на цифры кроме нуля.

public void SingleNumber(int result)
        {
            bool t = true;
            List<int> usedNums = new List<int>();

            while(t)
            {
                if(usedNums.Count > 1)
                {
                    for (int i = 0; i < usedNums.Count; i++)
                    {
                        if (usedNums[i] == result)
                        {
                            t = false;
                        }
                    }
                }

                usedNums.Add(result);

                int newRes = result;
                string stroka = newRes.ToString();
                char[] num = stroka.ToCharArray();
                for (int i = 0; i < num.Length; i++)
                {
                    if(num.Length == 1)
                    {
                        int b3 = num[i] - '0';
                        result = b3 * b3;
                        break;
                    }
                    for (int j = i + 1; j < num.Length; j++)
                    {
                        int b = num[i] - '0';
                        int b1 = num[j] - '0';
                        if(i >= 1)
                        {
                            result += b1 * b1;
                        }
                        else
                        {
                            result = b * b + b1 * b1;
                        }
                    }
                }
                Console.WriteLine(result);

                if(result == 1)
                {
                    break;
                }
            }
        }

Суть алгоритма в том, что она разбивает число на цифры. Потом возводит каждую цифру в квадрат и складывают их. И так по кругу пока не получиться единица. Если единица не получается, то возвращает false.


Ответы (1 шт):

Автор решения: MBo

Строки тут вообще не нужны.

 int value = 320;
 int sum = 0;
 while (value > 0) {
    int t = value % 10;
    sum += t * t;
    value /= 10;
 }
→ Ссылка