You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

F#如何将整数拆分为各数位元素组成的新列表

F# 整数转按高位到低位排列的数位列表实现

核心逻辑是利用整数取模% 10取当前个位、整数除以10/ 10移除个位的特性递归拆分,注意直接递归拼接容易出现数位顺序颠倒、列表拼接效率低的问题,下面给两种可运行的实现:

基础直观版本

逻辑最简单好理解,每次递归拆分出高位部分的列表,再把当前个位拼到列表末尾:

let rec convertInt x = 
    if x < 10 then
        [x]
    else
        convertInt (x / 10) @ [x % 10]

这个版本的缺点是列表末尾追加操作@每次都要遍历已有列表,数字很大的时候性能一般。

高性能尾递归版本

用内部尾递归函数+累积参数收集数位,最后一次性反转列表,时间复杂度更优,还补了0值的边界处理:

let convertInt x =
    let rec loop remaining acc =
        if remaining = 0 then acc
        else loop (remaining / 10) (remaining % 10 :: acc)
    if x = 0 then 
        [0]
    else
        loop x [] |> List.rev
  • 内部loop函数的remaining参数是还没拆分的剩余数字,acc是已经拆分出的、个位在前的数位集合
  • 递归到剩余数字为0时,累积的列表是倒序的(比如输入561时累积结果是[1;6;5]),调用List.rev反转后就得到高位在前的正确结果
  • 如果需要支持负数输入,只要在进入递归前先对输入取绝对值abs x即可

测试用例执行效果:

convertInt 561 → 输出 [5; 6; 1]
convertInt 0 → 输出 [0]
convertInt 987654 → 输出 [9; 8; 7; 6; 5; 4]

内容的提问来源于stack exchange,提问作者kelperg1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.03 09:21:42