Anonymous user
Count the coins: Difference between revisions
→{{header|C}}: print integers instead
(→{{header|C}}: bug fix) |
(→{{header|C}}: print integers instead) |
||
Line 36:
/* ad hoc 128-bit integer (I'm aware of GMP, but this is faster) */
typedef
typedef struct xint { ull c, v; } xint;
xint one = { 0, 1 }, zero = { 0, 0 };
Line 72 ⟶ 73:
}
void print (xint v)
int main()▼
{
# define BITS (sizeof(ull) * CHAR_BIT/2)
# define
int i, k = 63;
char buf[64] = {0};
ull n[3] = {v.c, v.v >> BITS, v.v & (BASE - 1)};
while (n[0] || n[1] || n[2])
for (i = 0; i < 3; n[i++] /= 10)
if (i < 2) n[i + 1] += BASE * (n[i] % 10);
else buf[--k] = '0' + n[2] % 10;
puts(buf + k);
}
▲int main()
{
int us_coins[] = { 100, 50, 25, 10, 5, 1, 0 };
int eu_coins[] = { 200, 100, 50, 20, 10, 5, 2, 1, 0 };
printf("%d\n", count(100, us_coins + 2));
▲ ret = countx(10000 * 100, us_coins); print(ret);
▲ ret = countx(1000 * 100, eu_coins); print(ret);
▲ ret = countx(10000 * 100, eu_coins); print(ret);
return 0;
}</lang>output (task only requires the first two lines
13398445413854501
1333983445341383545001
10056050940818192726001
99341140660285639188927260001</lang>
=={{header|Common Lisp}}==
|