Narcissistic decimal number: Difference between revisions

m (sp.)
Line 5:
 
The task is to generate and show here, the first 25 narcissistic numbers.
 
=={{header|C}}==
<lang c>#include <stdio.h>
 
typedef long long xint;
 
#define MAX_LEN 16
xint dpow[MAX_LEN + 1][11];
 
void init(void)
{
int i, p;
for (p = 0; p <= MAX_LEN; p++)
for (i = 0; i <= 10; i++)
dpow[p][i] = p ? dpow[p-1][i] * i : 1;
}
 
void narc(int power, int pos, xint value, xint dsum)
{
xint i, ds, v, ten;
 
if (!pos) {
if (value == dsum)
printf(" %lld", value);
return;
}
 
ten = dpow[pos - 1][10];
for (i = (pos == power); i < 10; i++) {
ds = dsum + dpow[power][i];
v = value + i * ten;
 
if (ds >= v + ten) break;
 
if (v <= ds + dpow[power][9] * (pos - 1))
narc(power, pos - 1, v, ds);
}
}
 
int main(void)
{
int i;
init();
 
for (i = 1; i <= 16; i++) {
printf("length %d:", i);
narc(i, i, 0, 0);
putchar('\n');
}
 
return 0;
}</lang>
{{out}}
<pre>
length 1: 1 2 3 4 5 6 7 8 9
length 2:
length 3: 153 370 371 407
length 4: 1634 8208 9474
length 5: 54748 92727 93084
length 6: 548834
length 7: 1741725 4210818 9800817 9926315
length 8: 24678050 24678051 88593477
length 9: 146511208 472335975 534494836 912985153
^C
</pre>
 
=={{header|Perl 6}}==
Anonymous user