Другие языки программирования и технологии

В некоторой стране используются денежные купюры достоинством в 1, 2, 4, 8, 16, 32 и 64. дано натуральное число N. Как на

AD
Alex Dj
96
; в eax - количество денег. Предполагается, что это число меньше/равно 4294967295 (больше в 32 бита не поместится)
; в ebx - адрес массива по 4 байта, купюры расположены в порядке убывания, общий размер 7*4=28 байт. В Си это реализуется как-то так (точно не знаю) : unsigned int kupures[7];
mov edx, eax
shr edx, 6 ; теперь edx содержит количество купюр по 64 рубля
mov dword [ebx], edx
;; с остальными купюрами всё проще. Каждая следующая степень 2 - это просто то, есть купюра или нет (если нужно расплатиться наименьшим их количеством)
;; кстати, всё это можно посмотреть и в обычном калькуляторе Windows
mov edx, eax
shr edx, 5
and edx, 1
mov dword [ebx+4], edx
mov edx, eax
shr edx, 4
and edx, 1
mov dword [ebx+8], edx
mov edx, eax
shr edx, 3
and edx, 1
mov dword [ebx+12], edx
mov edx, eax
shr edx, 2
and edx, 1
mov dword [ebx+16], edx
mov edx, eax
shr edx, 1
and edx, 1
mov dword [ebx+20], edx
and eax, 1
mov dword [ebx+24], eax

Я это не проверял, но должно работать
Это на Ассемблере, но элементарно переводится на что-нибудь другое

В JS (тока что проверил, вроде работает) :
money = prompt("Введите количество денег: ");
if(!isNaN(money)) {
alert("Деревянных купюр (по 1 руб) : "+ (money&1) +"\nКупюр по 2 руб: "+ ((money>>1)&1) +"\nКупюр по 4 руб: "+ ((money>>2)&1) +"\nКупюр по 8 руб: "+ ((money>>3)&1) +"\nКупюр по 16 руб: "+ ((money>>4)&1) +"\nКупюр по 32 руб: "+ ((money>>5)&1) +"\nКупюр по 64 руб: "+ (money>>6));
}

P.S. Хм.. . я как-то не учёл "натуральность" числа N. Если понадобится дробная часть числа, то в разных языках для этого существуют разные функции).
Ivan Ivanov
Ivan Ivanov
37 544
Лучший ответ
i c q 169527143
Игорь Куличков
Игорь Куличков
32 502
разложение
N=a6*64+a5*32+a4*16+a3*8+a2*4+a1*2+a0;

результат, для x=0..5
ax=(N div 2^x) mod 2;
для x=6
ax=(N div 64);

т. е.
a0=(N div 1) mod 2;
a1=(N div 2) mod 2;
a2=(N div 4) mod 2;
...

Похожие вопросы