我试图写一个fsharp函数来查看一个数字是否是一个" armstrong"号码:
正整数是一个阿姆斯特朗数,如果它等于其数字的立方总和 - 例如,第一个这样的数字是1而第二个是153.
例如,。 1 ^ 3 + 5 ^ 3 + 3 ^ 3 = 153
在fsharp中是否有一种方法可以提取数字的各个数字,这样我就可以将它们立方体化,然后将它们的立方结果一起添加?
答案 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
,也适用于long
和biginteger
参数,因此您可以使用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|]