Munchausen numbers: Difference between revisions
Content added Content deleted
m (→{{header|Dc}}) |
(→{{header|C sharp|C#}}: added alternate faster version) |
||
Line 435: | Line 435: | ||
} |
} |
||
}</lang> |
}</lang> |
||
<pre>0 |
|||
1 |
|||
3435 |
|||
438579088</pre> |
|||
=== Faster version alternate === |
|||
{{trans|Visual Basic .NET}} |
|||
Search covers all 11 digit numbers (as point out elsewhere, 11*(9^9) has only 10 digits, so there are no Munchausen numbers with 11+ digits), not just the first half of the 9 digit numbers. Computation time is under 1.5 seconds. |
|||
<lang csharp>using System; |
|||
static class Program |
|||
{ |
|||
public static void Main() |
|||
{ |
|||
long sum, ten1 = 0, ten2 = 10; byte [] num; int [] pow = new int[10]; |
|||
int i, j, n, n1, n2, n3, n4, n5, n6, n7, n8, n9, s2, s3, s4, s5, s6, s7, s8; |
|||
for (i = 1; i <= 9; i++) { pow[i] = i; for (j = 2; j <= i; j++) pow[i] *= i; } |
|||
for (n = 1; n <= 11; n++) { for (n9 = 0; n9 <= n; n9++) { for (n8 = 0; n8 <= n - n9; n8++) { |
|||
for (n7 = 0; n7 <= n - (s8 = n9 + n8); n7++) { for (n6 = 0; n6 <= n - (s7 = s8 + n7); n6++) { |
|||
for (n5 = 0; n5 <= n - (s6 = s7 + n6); n5++) { for (n4 = 0; n4 <= n - (s5 = s6 + n5); n4++) { |
|||
for (n3 = 0; n3 <= n - (s4 = s5 + n4); n3++) { for (n2 = 0; n2 <= n - (s3 = s4 + n3); n2++) { |
|||
for (n1 = 0; n1 <= n - (s2 = s3 + n2); n1++) { |
|||
sum = n1 * pow[1] + n2 * pow[2] + n3 * pow[3] + n4 * pow[4] + |
|||
n5 * pow[5] + n6 * pow[6] + n7 * pow[7] + n8 * pow[8] + n9 * pow[9]; |
|||
if (sum < ten1 || sum >= ten2) continue; |
|||
num = new byte[10]; foreach (char ch in sum.ToString()) num[Convert.ToByte(ch) - 48] += 1; |
|||
if (n - (s2 + n1) == num[0] && n1 == num[1] && n2 == num[2] |
|||
&& n3 == num[3] && n4 == num[4] && n5 == num[5] && n6 == num[6] |
|||
&& n7 == num[7] && n8 == num[8] && n9 == num[9]) Console.WriteLine(sum); |
|||
} } } } } } } } } |
|||
ten1 = ten2; ten2 *= 10; |
|||
} |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre>0 |
<pre>0 |
||
1 |
1 |