1、计算得到最少硬币数
货币系统有1、4、16、64共计4种硬币,以及面值为1024的纸币。现在用1024的纸币购买一件价值为N(0<N<=1024)的商品。问最少收多少硬币?
方法一:
(1024-N)/64得到的余数再除以16,得到余数再除以4,得到余数相加。
class Solution:
def minnum(self, N):
num = 0
res = 1024-N
for i in [64, 16, 4, 1]:
num += res/i
res = res%i
return num
f = Solution()
N = 200
a = f.minnum(N)
print a
17
1
2
3
4
5
6
7
8
9
10
11
12
13
方法二:位运算
#include <iostream>
using namespace std;
#define PAPER_CURRENCY_VALUE 1024
int main() {
int n = 0;
cin >> n;
int curCurrency = 1;
int result = 0;
int change = PAPER_CURRENCY_VALUE - n;
while (change) {
int bit = curCurrency == 64 ? 4 : 2;
int mask = ((1 << bit) - 1);
int num = (change & mask