【 Grey Hack 】大数四则运算

目录

  • 效果
    • 乘方
  • 源码

版本:Grey Hack v0.7.3619 - Alpha


       在Gs中,位数大于15的整数将以科学计数法显示,故这里提供一种基于字符串加法的四则大数运算算法。由于位数大于10的字符串无法用to_int方法转化为整数,因此本示例中以长度9分割字符串以加速计算。

效果

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

乘方

在这里插入图片描述
对照:
在这里插入图片描述

源码

add = function(Str0, Str1)Str0 = Str0.trimStr1 = Str1.trimif Str0[0] == "+" or Str0[0] == "-" thenStrNum0 = Str0[1:]elseStrNum0 = Str0[0:]end if while StrNum0[0] == "0" and len(StrNum0) > 1StrNum0 = StrNum0[1:]end whileLen0 = len(StrNum0)if Str1[0] == "+" or Str1[0] == "-" thenStrNum1 = Str1[1:]elseStrNum1 = Str1[0:]end ifwhile StrNum1[0] == "0" and len(StrNum1) > 1StrNum1 = StrNum1[1:]end whileLen1 = len(StrNum1)if Str0[0] == "-" then Sign0 = "-"elseSign0 = "+"end ifif Str1[0] == "-" then Sign1 = "-"elseSign1 = "+"end ifSign = ""if Len0 > Len1 thenSign = Sign0StrLonger = StrNum0[0:]StrSmaller = StrNum1[0:]else if Len0 < Len1 thenSign = Sign1StrLonger = StrNum1[0:]StrSmaller = StrNum0[0:]elsefor _ in range(0, Len0 - 1, 1)if StrNum0[_].to_int > StrNum1[_].to_int thenSign = Sign0StrLonger = StrNum0[0:]StrSmaller = StrNum1[0:]else if StrNum0[_].to_int < StrNum1[_].to_int thenSign = Sign1StrLonger = StrNum1[0:]StrSmaller = StrNum0[0:]end ifif Sign != "" then breakend forend ifif Sign == "" then Sign = Sign0StrLonger = StrNum0[0:]StrSmaller = StrNum1[0:]end ifStrLongerList = [] while len(StrLonger) > 9StrLongerList = StrLongerList + [StrLonger[-9:]]StrLonger = StrLonger[:-9]end whileif StrLonger != "" then StrLongerList = StrLongerList + [StrLonger]StrSmallerList = [] while len(StrSmaller) > 9StrSmallerList = StrSmallerList + [StrSmaller[-9:]]StrSmaller = StrSmaller[:-9]end whileif StrSmaller != "" then StrSmallerList = StrSmallerList + [StrSmaller]ResultStr = ""if Sign0 == Sign1 then Jinwei = 0for _ in range(0, len(StrSmallerList) - 1, 1)temp = Jinwei + StrLongerList[_].to_int + StrSmallerList[_].to_intif temp >= 1000000000 thentemp = temp - 1000000000Jinwei = 1elseJinwei = 0end iftemp = str(temp)while len(temp) < 9temp = "0" + tempend whileResultStr = temp + ResultStrend forif len(StrLongerList) != len(StrSmallerList) thenfor _ in range(len(StrSmallerList), len(StrLongerList) - 1, 1)temp = Jinwei + StrLongerList[_].to_intif temp >= 1000000000 thentemp = temp - 1000000000Jinwei = 1elseJinwei = 0end iftemp = str(temp)while len(temp) < 9temp = "0" + tempend whileResultStr = temp + ResultStrend forend ifif Jinwei == 1 thenResultStr = "1" + ResultStrJinwei = 0end ifelseJiewei = 0for _ in range(0, len(StrSmallerList) - 1, 1)temp = Jiewei + StrLongerList[_].to_int - StrSmallerList[_].to_intif temp < 0 thentemp = temp + 1000000000Jiewei = -1elseJiewei = 0end iftemp = str(temp)while len(temp) < 9temp = "0" + tempend whileResultStr = temp + ResultStrend forif len(StrLongerList) != len(StrSmallerList) thenfor _ in range(len(StrSmallerList), len(StrLongerList) - 1, 1)temp = Jiewei + StrLongerList[_].to_intif temp < 0 thentemp = temp + 1000000000Jiewei = -1elseJiewei = 0end iftemp = str(temp)while len(temp) < 9temp = "0" + tempend whileResultStr = temp + ResultStrend forend ifend ifwhile ResultStr[0] == "0" and len(ResultStr) > 1ResultStr = ResultStr[1:]end whileResultStr = Sign + ResultStrif len(ResultStr) == 2 and ResultStr[1] == "0" thenreturn "0"elsereturn ResultStrend if
end functionsub = function(Str0, Str1)Str0 = Str0.trimStr1 = Str1.trimif Str0[0] == "+" or Str0[0] == "-" thenStrNum0 = Str0[1:]elseStrNum0 = Str0[0:]end if while StrNum0[0] == "0" and len(StrNum0) > 1StrNum0 = StrNum0[1:]end whileif Str1[0] == "+" or Str1[0] == "-" thenStrNum1 = Str1[1:]elseStrNum1 = Str1[0:]end ifwhile StrNum1[0] == "0" and len(StrNum1) > 1StrNum1 = StrNum1[1:]end whileif Str0[0] == "-" then Sign0 = "-"elseSign0 = "+"end ifif Str1[0] == "-" then Sign1 = "+"elseSign1 = "-"end ifreturn add(Sign0 + StrNum0, Sign1 + StrNum1)
end functionmul = function(Str0, Str1)Str0 = Str0.trimStr1 = Str1.trimif Str0[0] == "+" or Str0[0] == "-" thenStrNum0 = Str0[1:]elseStrNum0 = Str0[0:]end if while StrNum0[0] == "0" and len(StrNum0) > 1StrNum0 = StrNum0[1:]end whileLen0 = len(StrNum0)if Str1[0] == "+" or Str1[0] == "-" thenStrNum1 = Str1[1:]elseStrNum1 = Str1[0:]end ifwhile StrNum1[0] == "0" and len(StrNum1) > 1StrNum1 = StrNum1[1:]end whileLen1 = len(StrNum1)if StrNum0 == "0" or StrNum1 == "0" then return "0"if Str0[0] == "-" then Sign0 = "-"elseSign0 = "+"end ifif Str1[0] == "-" then Sign1 = "-"elseSign1 = "+"end ifSign = ""if Len0 > Len1 thenSign = Sign0StrLonger = StrNum0[0:]StrSmaller = StrNum1[0:]else if Len0 < Len1 thenSign = Sign1StrLonger = StrNum1[0:]StrSmaller = StrNum0[0:]elsefor _ in range(0, Len0 - 1, 1)if StrNum0[_].to_int > StrNum1[_].to_int thenSign = Sign0StrLonger = StrNum0[0:]StrSmaller = StrNum1[0:]else if StrNum0[_].to_int < StrNum1[_].to_int thenSign = Sign1StrLonger = StrNum1[0:]StrSmaller = StrNum0[0:]end ifif Sign != "" then breakend forend ifif Sign == "" then Sign = Sign0StrLonger = StrNum0[0:]StrSmaller = StrNum1[0:]end ifif Sign0 == Sign1 thenSign = "+"elseSign = "-"end ifResultStr = "0"while StrSmaller != "0"StrSmaller = add(StrSmaller, "-1")ResultStr = add(ResultStr, StrLonger)end whilereturn (Sign + ResultStr[1:])
end functiondiv = function(Str0, Str1)Str0 = Str0.trimStr1 = Str1.trimif Str0[0] == "+" or Str0[0] == "-" thenStrNum0 = Str0[1:]elseStrNum0 = Str0[0:]end if while StrNum0[0] == "0" and len(StrNum0) > 1StrNum0 = StrNum0[1:]end whileif Str1[0] == "+" or Str1[0] == "-" thenStrNum1 = Str1[1:]elseStrNum1 = Str1[0:]end ifwhile StrNum1[0] == "0" and len(StrNum1) > 1StrNum1 = StrNum1[1:]end whileif StrNum1 == "0" then exit("Runtime error: divide by zero")if StrNum0 == "0" then return ["0", "0"]if Str0[0] == "-" then Sign0 = "-"elseSign0 = "+"end ifif Str1[0] == "-" then Sign1 = "-"elseSign1 = "+"end ifif Sign0 == Sign1 thenSign = "+"elseSign = "-"end ifResultStr = "0"TempStr = sub(StrNum0, StrNum1)while TempStr[0] != "-" StrNum0 = TempStrTempStr = sub(StrNum0, StrNum1)ResultStr = add(ResultStr, "1")end whileif ResultStr[0] == "+" then ResultStr = Sign + ResultStr[1:]end ifif StrNum0[0] == "+" then StrNum0 = Sign0 + StrNum0[1:]end ifreturn [ResultStr, StrNum0]
end functionpow = function(Str0, Str1)Str0 = Str0.trimStr1 = Str1.trimif Str0[0] == "+" or Str0[0] == "-" thenStrNum0 = Str0[1:]elseStrNum0 = Str0[0:]end if while StrNum0[0] == "0" and len(StrNum0) > 1StrNum0 = StrNum0[1:]end whileif Str1[0] == "+" or Str1[0] == "-" thenStrNum1 = Str1[1:]elseStrNum1 = Str1[0:]end ifwhile StrNum1[0] == "0" and len(StrNum1) > 1StrNum1 = StrNum1[1:]end whileif StrNum1 == "0" then return "+1"if StrNum0 == "0" then return "0"if Str0[0] == "-" then Sign0 = "-"elseSign0 = "+"end ifif Str1[0] == "-" then Sign1 = "-"elseSign1 = "+"end ifResultStr = "1"while StrNum1 != "0"ResultStr = mul(ResultStr, Sign0 + StrNum0)StrNum1 = add(StrNum1, "-1")end whilereturn ResultStr
end function// print(add(params[0],params[1]))
// print(sub(params[0],params[1]))
// print(mul(params[0],params[1]))
// print(div(params[0],params[1]))
// print(pow(params[0],params[1]))

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/400333.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uniapp打包小程序上传测试后,使用有的插件显示空白页面,问题解决方【有效 / 最新】

目录 问题1图在微信开发者平台正常能使用 打包上传微信小程序测试问题2图在微信开发者平台正常能使用 打包上传微信小程序测试解决步骤一1.2.3. 解决步骤二打开微信小程序官网看图跨域网址 最后 问题1图 在微信开发者平台正常能使用 未上传小程序&#xff0c;开发过程中&…

django加载本地html

django加载本地html from django.shortcuts import renderfrom django.http import HttpResponse from django.shortcuts import render,render_to_response # Create your views here. def hello(request): return render_to_response("hello.html") 传递数据到htm…

Java知多少(68)面向字符的输出流

面向字符的输出流都是类 Writer 的子类&#xff0c;其类层次结构如图 10-5 所示。 图10-5 Writer的类层次结构图表 10-3 列出了 Writer 的主要子类及说明。 表 10-3 Writer 的主要子类类名功能说明CharArrayWriter写到字符数组的输出流BufferedWriter缓冲输出字符流PipedWriter…

Linux虚拟机的替代品:Docker与WSL2上手笔记

目录安装Docker可能出现的问题内核需更新Linux 内核更新包将 WSL 2 设置为默认版本An error occurred安装镜像使用Microsoft Store安装所选的 Linux 分发手动安装镜像及文件夹的共享Docker run 命令Windows Terminal的安装在Windows Terminal中直接运行已有的容器Windows 10 20…

flask需求文件requirements.txt的创建及使用

1.简介 Python项目中必须包含一个 requirements.txt 文件&#xff0c;用于记录所有依赖包及其精确的版本号用以新环境部署。 2.进入虚拟环境然后输入pip freeze > requirements.txt 每次安装或者升级了包之后最好也一并使用这个命令更新这个文件。 需求文件的内容示例…

【联盛德W806上手笔记】一、开发环境和烧录程序

目录简介芯片外观MCU 特性安全特性低功耗模式芯片结构管脚定义极限参数开发环境SDK的获取从官网获取从Q群获取iosetting大佬 维护的wm-sdk-w806打开工程编译固件烧录现象Windows 10 20H2 HLK-W806-V1.0-KIT WM_SDK_W806_v0.6.0 引自《W80X_MCU_快速入门V0.2》、《W806 MCU 芯片…

Mac os + Flask + PyCharm python开发环境集成

1. 打开mac自带终端安装virtualenv 执行 sudo easy_install virtualenv / sudo pip install virtualenv 2.安装完 virtualenv &#xff0c;打开一个 shell &#xff0c;创建自己的环境。 $ mkdir myapp $ cd myapp $ virtualenv venv New python executable in env/bin/py…

zookeeper注意几点

为什么80%的码农都做不了架构师&#xff1f;>>> Zookeeper 作为一个分布式的服务框架&#xff0c;主要用来解决分布式集群中应用系统的一致性问题&#xff0c;它能提供基于类似于文件系统的目录节点树方式的数据存储&#xff0c;但是 Zookeeper 并不是用来专门存储…

【51单片机快速入门指南】7:片上EEPROM

目录硬知识IAP及EEPROM新增特殊功能寄存器介绍EEPROM空间大小及地址小常识大建议常见问题示例程序EEPROM.cEEPROM.h测试程序main.c普中51-单核-A2 STC89C52 Keil uVision V5.29.0.0 PK51 Prof.Developers Kit Version:9.60.0.0 硬知识 摘自《STC89C52系列单片机器件手册》 ST…

wndows系统命令总结

window8系统下 打开运行窗口----------鼠标放到任务栏的windows图标下&#xff0c;右击&#xff0c;弹出菜单中如上图或者 打开运行窗口---------按“WINR”键&#xff0c; cmd-------打开命令窗口 services.msc--------打开服务命令 calc-----------启动计算器 dvdplay-------…

【RK3399Pro学习笔记】三、Debian 9 安装 ROS (Thinker Edge R)

目录配置源设置 Key安装初始化rosdep环境配置测试安装rosinstall卸载平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 参考资料&#xff1a; RK3399(Debian9 - stretch) 安装 ROS Lunar —— WB893…

perl学习(二)

2019独角兽企业重金招聘Python工程师标准>>> 在perl中又两个必须搞清楚&#xff0c;就是标量值和标量变量&#xff0c;列表和数组。 直接量就是数值在perl程序代码中的表现方式&#xff0c;就是直接写在程序里的数据&#xff0c;是标量值。如12&a…

【RK3399Pro学习笔记】四、ROS 创建工作空间与功能包

目录创建工作空间编译工作空间功能包创建功能包编译功能包设置环境变量检查环境变量平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 记录自【古月居】古月ROS入门21讲 | 一学就会的ROS机器人入门教…

hip-hop初探

啥都不说了&#xff0c;上两张图片先 1、使用hiphop的 2、不使用这玩意的 都是前端部署nginx&#xff0c;转发的后面php的 hhvm的配置文件 /etc/hhvm.hdf 目前结论&#xff1a;facebook的这玩意可能适用于facebook业务&#xff0c;对于我的业务来说反而拖后腿转载于:https://ww…

表达式求值(二叉树方法/C++语言描述)(二)

表达式二叉树节点的数据可能是运算数或运算符&#xff0c;可以使用一个联合体进行存储&#xff1b;同时还需要一个变量来指示存储的是运算数还是运算符&#xff0c;可以采用和栈方法求值中一样的枚举类型TokenType&#xff1a; 1 typedef enum2 {3 BEGIN,4 NUMBER,5 …

【RK3399Pro学习笔记】五、ROS与USB摄像头

目录usb_cam方法一安装一些要用的包测试usb摄像头方法二下载usb_cam源码编译测试usb摄像头uvc-camera平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 参考资料&#xff1a; ROS下usb_cam的安装 ——…

这是我们的第一篇博客----偕行软件

欢迎您光临我们的网站&#xff1a;链接 转载于:https://www.cnblogs.com/udsoft/p/3259366.html

MFC编程之创建Ribbon样式的应用程序框架

Ribbon界面就是微软从Office2007開始引入的一种为了使应用程序的功能更加易于发现和使用、降低了点击鼠标的次数的新型界面。从实际效果来看&#xff0c;不仅外观美丽&#xff0c;并且功能直观&#xff0c;用户操作简洁方便。 利用MFC向导创建Ribbon样式的单文档应用程序框架的…

【RK3399Pro学习笔记】六、ROS发布者Publisher的编程实现

目录如何实现一个发布者C创建功能包编写程序配置CMakeLists.txt编译并运行发布者python创建并编写脚本运行平台&#xff1a;华硕 Thinker Edge R 瑞芯微 RK3399Pro 固件版本&#xff1a;Tinker_Edge_R-Debian-Stretch-V1.0.4-20200615 记录自【古月居】古月ROS入门21讲 | 一学…

三星:Android之外,技术为王

作为Android阵营的领军代表&#xff0c;三星手机为行业与消费者带来了深远的影响与改变&#xff0c;以至于一提到三星&#xff0c;几乎所有人的第一印象都是三星手机。事实上&#xff0c;在手机之外的众多产品领域中&#xff0c;三星同样有着惊人的成绩与贡献。三星的显示器产品…