Вивести на екран x, записане в системі числення з основою n

Формулювання. 
Дано натуральні числа x і n (n <= 10). Вивести на екран число x, записане в системі числення з основою n.

Рішення. 
Залишок від ділення будь-якого десяткового числа x на число p дає нам розряд одиниць числа x (його крайній розряд праворуч) у системі числення з основою p.
Доведемо це.
Скористаємося формулою запису десяткового числа x в системі числення з основою p, що складається з r знаків:
x = ar-1 * pr-1 + ar-2 * pr-2 + ... + a2 * p2 + a1 * p1 + a0 * p0,
де pr-1, pr-2 ..., p2, p1, p0 - основа системи числення
ar-1, ar-2 ..., a2, a1, a0 - цифри в записі цього числа в системі числення з основою p.
Наприклад, число 378 у десятковій системі числення виглядає так: 378 = 3 * 10^2 + 7 * 10^1 + 8 * 10^0. Якщо ми поспіль випишемо цифри a2 (= 3), a1 (= 7), a0 (= 8), то отримаємо вихідне число 
Запишемо подання числа в 22 двійковій системі числення (переведемо його за допомогою калькулятора, воно дорівнює 101102) по цій же формулі: 22 = 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 1 * 2^1 + 0 * 2^0. Зрозуміло, що якщо ми обчислимо вираз в правій частині рівності, то отримаємо саме 22.
Тепер покажемо те, що якщо ми візьмемо залишок від ділення числа 22 на 2, потім розділимо його на 2, відкинувши залишок, і будемо повторювати ці дії до обнулення числа, то в підсумку отримаємо всі його розряди в порядку справа наліво.
Візьмемо його запис 1 * 2^4 + 0 * 2^3 + 1 * 2^2 + 1 * 2^1 + 0 * 2^0 і розділимо її на 2. З алгебри відомо, що якщо ми ділимо суму чисел на деяке число, то на нього діляться всі складові цієї суми . 1 * 2^4,  0 * 2^3,  1 * 2^2 і 1 * 2^1 діляться на 2, так як в них присутня множник 2.
0 * 2^0 = 0 * 1 = 0 не ділиться на 2, відповідно, це число буде залишком від ділення на 2, і при цьому за формулою воно є крайнім справа розрядом. Потім ми ділимо весь цей запис на 2 і відкидаємо залишок, отримуємо: 1 * 2^3 + 0 * 2^2 + 1 * 2^1 + 1 * 2^0. Очевидно, що при наступному взятті залишку ми отримаємо цифру з крайнього праворуч доданка. Повторюючи цей ланцюжок, ми поступово отримаємо всі цифри числа 22 в системі числення з основою 2.
Узагальнюючи вищесказане, приходимо до висновку, що для формування запису числа нам необхідно отримати всі залишки від ділення x на основу n, при цьому ділячи x на n після кожного взяття залишку.
Яким чином ми запишемо залишки справа наліво? Дуже просто: множимо черговий залишок на деякий множник z, який додає необхідну кількість нулів, щоб цифра виявилася в необхідній позиції, і додаємо до результату r. Спочатку z буде дорівнює 1, оскільки ми додаємо цифру до розряду одиниць, потім z в кожній ітерації буде множитися на 10.
У підсумку ми додаємо до результату r перший залишок, помножений на 1, другий залишок, помножений на 10, третій залишок, помножений на 100 і так далі, поки не буде сформовано шукане число:
r: = 0; z: = 1; while x <> 0 do begin   r: = r + z * (x mod n);   x: = x div n;   z: = z * 10 end;
Код програми:

program ConvertNotation;
var
c, z, r: integer;
x, z: word;
begin
readln(x, n);
r := 0;
z := 1;
while x <> 0 do begin
r := r + z * (x mod n);
x := x div n;
z := z * 10
end;
writeln(r)
end.

Немає коментарів:

Дописати коментар