热门标签 | HotTags
当前位置:  开发笔记 > 开发工具 > 正文

将数字列表转换为自然数

如何解决《将数字列表转换为自然数》经验,为你挑选了1个好方法。



1> Willem Van O..:

用基数位置数系统ř以这样的方式被构造,以使得一个数字12 ...一个Ñ一个一个数字,具有值:

总和a_i次r ^(ni)

这意味着我们可以通过以下方式获取一系列数字的数字:

fromDigits :: (Num a, Foldable f) => a -> f a -> a
fromDigits r = foldl (\a x -> r * a + x) 0

或者语法上更紧凑:

fromDigits :: (Num a, Foldable f) => a -> f a -> a
fromDigits r = foldl ((+) . (r *)) 0

每次迭代,我们将累加器与基数相乘r,然后我们将下一个数字加到它上面.因此,如果数字包含n个数字,则第一个数字将乘以基数r n次.

例如,数字1425对于不同的基数具有不同的值:

Prelude> fromDigits 6 [1,4,2,5]
377
Prelude> fromDigits 7 [1,4,2,5]
558
Prelude> fromDigits 8 [1,4,2,5]
789
Prelude> fromDigits 9 [1,4,2,5]
1076
Prelude> fromDigits 10 [1,4,2,5]
1425


推荐阅读
author-avatar
你的美丽来自我的设计
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有