C#

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом

На вход алгоритма подаётся натуральное число N. Алгоритм строит по нему новое число R следующим образом.

1) Строится двоичная запись числа N.

2) К этой записи дописываются справа ещё два разряда по следующему правилу:

a) складываются все цифры двоичной записи, и остаток от деления суммы на 2 дописывается в конец числа (справа). Например, запись 11100 преобразуется в запись 111001;

b) над этой записью производятся те же действия – справа дописывается остаток от деления суммы цифр на 2.


Полученная таким образом запись (в ней на два разряда больше, чем в записи исходного числа N) является двоичной записью искомого числа R.

Укажите минимальное число R, которое превышает 43 и может являться результатом работы алгоритма.

В ответе это число запишите в десятичной системе.
Ответ 46
Код на C#:
 using System;

namespace Temp
{
internal class Program
{
static void Main(string[] args)
{

int N10 = 0, R10 = 0;
string N2 = "", R2 = "";

for(int i = 1; true; i++)
{
N10 = i;
N2 = From10to2(N10);
R2 = Operation(N2);
R10 = From2To10(R2);

Console.WriteLine($"{i}: N10|{N10} = N2|{N2}\n{i}: R2|{R2} = R10|{R10}");
Console.WriteLine("----------------------");
if (R10 > 43)
break;
}
Console.ReadLine();
}

static string From10to2(int N10)
{
string N2 = "";
string temp = "";
for (; N10 > 0; N10 = (int)(N10 / 2))
N2 += $"{N10 % 2}";
for (int i = N2.Length - 1; i >= 0; i--)
{
if (!(temp.Length == 0 && N2[i] == 0))
temp += N2[i];
}
N2 = temp;

return N2;
}

static int From2To10(string N2)
{
int N10 = 0;
for (int i = 0; i < N2.Length; i++)
N10 += (int)Char.GetNumericValue(N2[i]) * (int)Math.Pow(2, N2.Length - 1 - i);

return N10;
}

static string Operation(string N2)
{
for (int i = 0; i < 2; i++)
{
int Sum = 0;
for (int j = 0; j < N2.Length; j++)
Sum += (int)Char.GetNumericValue(N2[j]);
N2 += $"{Sum % 2}";
}

return N2;
}
}
}
ОШ
Олег Шульга
1 097
Лучший ответ