Ниже на пяти языках программирования записан алгоритм. Получив на вход натуральное число x, этот алгоритм печатает число S. Укажите такое наименьшее число x, при вводе которого алгоритм печатает шестизначное число.
| Бейсик | Python |
|---|---|
DIM X,S,D,R AS LONG INPUT X S = X R = 0 WHILE X > 0 D = X MOD 2 R = 10*R + D X = X \ 2 WEND S = R + S PRINT S
| x = int(input()) S = x; R = 0 while x > 0: d = x % 2 R = 10*R + d x=x // 2 S = R + S print(S)
|
| Паскаль | Алгоритмический язык |
var x,d,R,S: longint; begin readln(x); S := x; R := 0; while x > 0 do begin d := x mod 2; R := 10*R + d; x := x div 2; end; S := R + S; writeln(S); end.
| алг нач цел x, d, R, S ввод x S := x R := 0 нц пока x > 0 d := mod(x, 2) R := 10*R + d x := div(x, 2) кц S := R + S вывод S кон |
| Си++ | |
#include <iostream> using namespace std; int main() { long x,d,R,S; cin >> x; S = x; R = 0; while (x > 0){ d = x % 2; R = 10*R + d; x = x / 2; } S = R + S; cout << S << endl; return 0; }
| |
Для того, чтобы итоговое число было шестизначным, нужно, чтобы цикл выполнился 6 раз. Тогда нужно минимальное число, которое 6 раз поделится на 2 (при шестом делении на 2 результат будет равен 0). Известно, что число больше 32 (т. к. это минимальное число, которое 6 раз делится на 2), а следующее за ним подходит.
Ответ: 33.
Приведём другое решение на языке Python.
for i in range(1, 10000):
x = i
S = x
R = 0
while x > 0:
d = x % 2
R = 10 * R + d
x = x // 2
S = R + S
S = str(S)
if len(S) == 6:
print(i)
break

