F#确定一个数字是否是阿姆斯壮数

时间:2015-10-11 04:45:04

标签: f#

我试图写一个fsharp函数来查看一个数字是否是一个" armstrong"号码:

正整数是一个阿姆斯特朗数,如果它等于其数字的立方总和 - 例如,第一个这样的数字是1而第二个是153.

例如,

。 1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153

在fsharp中是否有一种方法可以提取数字的各个数字,这样我就可以将它们立方体化,然后将它们的立方结果一起添加?

1 个答案:

答案 0 :(得分:3)

您可以通过多种方式实现这一目标,丰富的F#.Net图书馆随时为您服务。

例如,您可以将候选数字转换为字符串,然后转换为字符数组,然后将每个数组元素转换回数字,将原始数字的各个数字转换为数组:

let asDigitArray n =
    n.ToString().ToCharArray()
    |> Array.map (System.Char.GetNumericValue >> System.Convert.ToInt32)

签入FSI

 > asDigitArray 12345;;
 val it : int [] = [|1; 2; 3; 4; 5|]

此外,此方法不仅适用于int,也适用于longbiginteger参数,因此您可以使用asDigitArray函数调查真正重要的阿姆斯特朗号码:

> asDigitArray 1234567898765L;;
val it : int [] = [|1; 2; 3; 4; 5; 6; 7; 8; 9; 8; 7; 6; 5|]
> asDigitArray 112233445566778899I;;
val it : int [] = [|1; 1; 2; 2; 3; 3; 4; 4; 5; 5; 6; 6; 7; 7; 8; 8; 9; 9|]