Алгоритм "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;
}