ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
12
返回列表 发新帖
楼主: shaowu459

[分享] Excel中实现长整数加法和乘法运算的一种公式写法

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-29 08:56 来自手机 | 显示全部楼层
pgp5866 发表于 2023-10-29 06:25
谢谢楼主分享,要是能再写个除法和减法就完美了,

减法模拟列竖式的方法应该也好做,除法的话感觉有除不尽的情况,有结果小于0的情况等等,比较麻烦

TA的精华主题

TA的得分主题

发表于 2023-10-29 14:39 | 显示全部楼层
谢谢楼主分享,本以为reduce很简单,其实很深奥

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-29 14:55 来自手机 | 显示全部楼层
橒♂蝣 发表于 2023-10-29 14:39
谢谢楼主分享,本以为reduce很简单,其实很深奥

.reduce本身逻辑确实很简单,循环计算,更新x值。但x是何种结构,如何更新x方法就太多了,非常灵活,我觉得这个函数精髓就在如何使用x。就本题来说,我的只是一种写法,模拟竖式计算,也有很多人有这个其他公式出来。有兴趣也可以动手试试,关键在思路和方法,公式实现起来应该还好。

TA的精华主题

TA的得分主题

 楼主| 发表于 2023-10-29 22:56 | 显示全部楼层
本帖最后由 shaowu459 于 2023-10-29 23:12 编辑
pgp5866 发表于 2023-10-29 06:25
谢谢楼主分享,要是能再写个除法和减法就完美了,
减法的公式供参考,思路和加法一致,只不过先判断哪个数字大。得到结果后去掉前导0,最后判断负号加不加。除法搞不定。
  1. =LET(s,SORTBY(C4:D4,RIGHT(REPT(0,999)&C4:D4,999),-1),t,@REDUCE("",SEQUENCE(MAX(LEN(s))),LAMBDA(x,y,LET(t,SUM(LEFT(RIGHT(0&s,y))*{1,-1})+N(@TAKE(x,-1)),IF(t>=0,VSTACK(t&@x,0),VSTACK(10+t&@x,-1))))),u,REDUCE(t,SEQUENCE(999),LAMBDA(x,y,--LEFT(x,9)&MID(x,10,999))),IF(@s=C4,"","-")&u)
复制代码

图片.png
图片.png

大整数减法-超人方案.rar

14.37 KB, 下载次数: 9

TA的精华主题

TA的得分主题

发表于 2024-5-24 12:21 | 显示全部楼层
shaowu459 发表于 2023-10-29 22:56
减法的公式供参考,思路和加法一致,只不过先判断哪个数字大。得到结果后去掉前导0,最后判断负号加不加。 ...

太感谢了,虽然这实例在实际中不一定用得着,但是给我们的思路却是崭新的,值得我们好好学习和研究,感谢!

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-24 20:40 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
计算菲波那切数列的第10000项的数值(回车后我的电脑用时179秒返回计算结果):

  1. =REDUCE({1,1},SEQUENCE(9998),LAMBDA(m,n,LET(t,@REDUCE("",SEQUENCE(1+MAX(LEN(m))),LAMBDA(x,y,LET(s,SUM(--LEFT(RIGHT(0&m,y)),N(TAKE(x,-1))),VSTACK(RIGHT(s)&@x,s>9)))),HSTACK(@DROP(m,,1),--LEFT(t,9)&MID(t,10,2090)))))
复制代码

Q7UO3D[4_XZ$I10BNL4E[UH.png
如果是兴趣测试,可以将9998改成比较小的数字,例如500(返回第502项值,半秒多出结果):
图片.png

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-26 13:41 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 shaowu459 于 2024-9-26 13:55 编辑

方法不变,更新一下加法细节,之前是一位一位加,比较慢,现在改成13位13位的加,第10000项目速度提高到12秒左右:

  1. =LET(零,REPT(0,13),f,LAMBDA(f,x,o,res,长度,m,IF(o=长度+2,res,LET(t,SUM(--LEFT(RIGHT(零&m,o*13),13)),s,t+x,f(f,LEN(s)>13,o+1,IF(t,RIGHT(零&s,13),--x)&res,长度,m)))),REDUCE({1,1},SEQUENCE(B3),LAMBDA(m,n,LET(长度,INT((MAX(LEN(m))-1)/13)+1,t,f(f,,1,"",长度,m),HSTACK(@DROP(m,,1),--LEFT(t,14)&MID(t,15,2090))))))
复制代码
图片.jpg



菲波那切数列第n项计算-长整数计算-超人(更新加法公式).rar

18.59 KB, 下载次数: 2

TA的精华主题

TA的得分主题

发表于 2024-9-26 16:00 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-9-26 16:15 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册

感谢关注
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-11-15 02:11 , Processed in 0.051396 second(s), 7 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表