Digital root/Multiplicative digital root: Difference between revisions
Content added Content deleted
m (→{{header|Scala}}: {{out}}) |
(C solution addition.) |
||
Line 383: | Line 383: | ||
8 :8 18 24 29 36 |
8 :8 18 24 29 36 |
||
9 :9 19 33 91 119</pre> |
9 :9 19 33 91 119</pre> |
||
=={{header|C}}== |
|||
<lang C> |
|||
#include <stdio.h> |
|||
#define twidth 5 |
|||
#define mdr(rmdr, rmp, n)\ |
|||
do { *rmp = 0; _mdr(rmdr, rmp, n); } while (0) |
|||
void _mdr(int *rmdr, int *rmp, long long n) |
|||
{ |
|||
/* Adjust r if 0 case, so we don't return 1 */ |
|||
int r = n ? 1 : 0; |
|||
while (n) { |
|||
r *= (n % 10); |
|||
n /= 10; |
|||
} |
|||
(*rmp)++; |
|||
if (r >= 10) |
|||
_mdr(rmdr, rmp, r); |
|||
else |
|||
*rmdr = r; |
|||
} |
|||
int main(void) |
|||
{ |
|||
int i, j, vmdr, vmp; |
|||
const int values[] = { 123321, 7739, 893, 899998 }; |
|||
const int vsize = sizeof(values) / sizeof(values[0]); |
|||
/* Initial test values */ |
|||
printf("Number MDR MP\n"); |
|||
for (i = 0; i < vsize; ++i) { |
|||
mdr(&vmdr, &vmp, values[i]); |
|||
printf("%6d %3d %3d\n", values[i], vmdr, vmp); |
|||
} |
|||
/* Determine table values */ |
|||
int table[10][twidth] = { 0 }; |
|||
int tfill[10] = { 0 }; |
|||
int total = 0; |
|||
for (i = 0; total < 10 * twidth; ++i) { |
|||
mdr(&vmdr, &vmp, i); |
|||
if (tfill[vmdr] < twidth) { |
|||
table[vmdr][tfill[vmdr]++] = i; |
|||
total++; |
|||
} |
|||
} |
|||
/* Print calculated table values */ |
|||
printf("\nMDR: [n0..n4]\n"); |
|||
for (i = 0; i < 10; ++i) { |
|||
printf("%3d: [", i); |
|||
for (j = 0; j < twidth; ++j) |
|||
printf("%d%s", table[i][j], j != twidth - 1 ? ", " : ""); |
|||
printf("]\n"); |
|||
} |
|||
return 0; |
|||
} |
|||
</lang> |
|||
{{out}} |
|||
<pre> |
|||
Number MDR MP |
|||
123321 8 3 |
|||
7739 8 3 |
|||
893 2 3 |
|||
899998 0 2 |
|||
MDR: [n0..n4] |
|||
0: [0, 10, 20, 25, 30] |
|||
1: [1, 11, 111, 1111, 11111] |
|||
2: [2, 12, 21, 26, 34] |
|||
3: [3, 13, 31, 113, 131] |
|||
4: [4, 14, 22, 27, 39] |
|||
5: [5, 15, 35, 51, 53] |
|||
6: [6, 16, 23, 28, 32] |
|||
7: [7, 17, 71, 117, 171] |
|||
8: [8, 18, 24, 29, 36] |
|||
9: [9, 19, 33, 91, 119] |
|||
</pre> |
|||
=={{header|C++}}== |
=={{header|C++}}== |