高精度模拟算法

高精度模拟算法

  • 高精度加法
extern string m,n;
extern int a[MAX],b[MAX],ans[MAX];
void addition(){int _m=max(m.size(),n.size());reverse(m.begin(),m.end()),reverse(n.begin(),n.end());//转置原字符串for(int i=0;i<m.size();i++) a[i]=m[i]-'0';//字符型以ASCII码存储,需要转换为整形for(int i=0;i<n.size();i++) b[i]=n[i]-'0';//核心部分for(int i=0;i<_m;i++){ans[i]+=(a[i]+b[i]);ans[i+1]+=ans[i]/10;//处理进位 (进位可能不止1,故不写ans[i+1]++)ans[i]%=10;//确定最终结果}while((c[_m]==0&&_m>0)) _m--;//删前导零for(int i=_m;i>=0;i--) cout<<ans[i];
}
  • 高精度减法
extern string m,n;
extern int a[MAX],b[MAX],ans[MAX];
extern bool flag;//标识原结果为负,最后需输出负号
void subtractive(){int _m=max(m.size(),n.size());//交换两字符串,使被减数>减数if(m.size()<n.size()) swap(m,n),flag=1;//位数小的直接交换else if(m.size()==n.size())//位数相等逐位比较for(int i=0;i<_m;i++)if(m[i]<n[i]) swap(m,n),flag=1;reverse(m.begin(),m.end()),reverse(n.begin(),n.end());//转置原字符串for(int i=0;i<m.size();i++) a[i]=m[i]-'0';//字符型以ASCII码存储,需要转换为整形for(int i=0;i<n.size();i++) b[i]=n[i]-'0';//核心部分for(int i=0;i<_m;i++){if(a[i]<b[i]){//处理借位a[i+1]--;//下一位被借1个a[i]+=10;//本位+10}ans[i]=a[i]-b[i];}if(flag) cout<<'-';while(ans[_m]==0&&_m>0) _m--;//删除前导零 注意减法相同数字相减为0 因此可能有多个前导零for(int i=_m;i>=0;i--) cout<<ans[i];
}
  • 高精度乘法
extern string m,n;
extern int a[MAX],b[MAX],ans[2*MAX];//两数相乘结果最长为两数长之和
void subtraction(){int _m=m.size()+n.size();//两数相乘结果最长为两数长之和reverse(m.begin(),m.end()),reverse(n.begin(),n.end());//转置原字符串for(int i=0;i<m.size();i++) a[i]=m[i]-'0';for(int i=0;i<n.size();i++) b[i]=n[i]-'0';for(int i=0;i<m.size();i++){for(int j=0;j<n.size();j++){ans[i+j]+=b[j]*a[i];//每位相乘,结果索引为每位索引之和ans[i+j+1]+=ans[i+j]/10;//处理进位 由于进位可能不止1,故不写ans[i+1]++ans[i+j]%=10;//确定最终结果}}while(ans[_m]==0&&_m>0) _m--;//删前导零for(int i=_m;i>=0;i--) cout<<ans[i];
}
  • 高精度除法
  1. 低精度/低精度 商为高精度型(保留小数点后 n n n位问题)

    extern int a,b,n,t;//a:被除数 b:除数 n:小数点后保留位数 t:余数
    extern string ans;
    void division(){ans+=to_string(a/b)+'.';t=a%b;//更新余数while(n--){ans+=to_string(t*10/b);t=t*10%b;//更新余数t}cout<<ans;
    }
    
  2. 高精度/低精度型(逐位试商法)

    extern string m;//m:被除数
    extern long long n,a[MAX],ans[MAX],x;//n:除数 x:余数
    void division(){int _m=m.size();//商的最大长度为被除数长度for(int i=0;i<_m;i++) a[i]=m[i]-'0';for(int i=0;i<_m;i++){ans[i]=(x*10+a[i])/n;//商=(余数*10+本位)/除数x=(x*10+a[i])%n;//更新余数=(余数*10+本位)%除数}int i=0;while(ans[i]==0&&i<_m-1) j++;//删前导零 注意不能把0全删了for(;i<_m;i++) cout<<ans[i];
    }
    
  3. 高精度/高精度型(减法模拟法)

    #include <bits/stdc++.h>
    using namespace std;
    // 减法部分
    int a[101],b[101],c[101],d,i;
    void inp(int a[]){ // 读入 string s;cin >> s; //读入字符串a[0] = s.size(); //a[0]储存字符串的长度for (i = 1;i <= a[0];i++) a[i] = s[a[0] - i] - '0';
    }
    void pri(int a[]){ // 输出 if (a[0] == 0){cout << "0" << endl;return;}for (i = a[0];i > 0;i--) cout << a[i];cout << endl;return;
    }
    int cmp(int a[],int b[]){//比较a和b的大小关系,若a>b则为1,若a<b则为-1,若a=b则为0if (a[0] > b[0]) return 1;  //若a的位数大于b,则a>bif (a[0] < b[0]) return -1;  //若a的位数小于b,则a<bfor (i = a[0];i > 0;i--){if (a[i] > b[i]) return 1;if (a[i] < b[i]) return -1;}return 0;
    }
    void jian(int a[],int b[]){ int pd = cmp(a,b); // 比较大小 if (pd == 0){ // 相等 a[0] = 0;return;}else if (pd == 1){for (i = 1;i <= a[0];i++){if (a[i] < b[i]) a[i + 1]--,a[i] += 10; // 借位 if (a[i] >= b[i]) a[i] -= b[i];}while((a[a[0]] == 0) && (a[0] > 0)) a[0]--;return;}
    }
    void numcpy(int p[],int q[],int det){for (i = 1;i <= p[0];i++) q[i + det - 1] = p[i];q[0] = p[0] + det - 1;
    }
    void chugao(int a[],int b[],int c[]){int i,tmp[101];c[0] = a[0] - b[0] + 1;for (i = c[0];i > 0;i--){memset(tmp,0,sizeof(tmp));numcpy(b,tmp,i);while (cmp(a,tmp) >= 0){c[i]++;jian(a,tmp);}}while((c[c[0]] == 0) && (c[0] > 0)) c[0]--;
    }// 应用部分 
    int main(){inp(a),inp(b);chugao(a,b,c);pri(c),pri(a);return 0;
    }
    

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

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

相关文章

Node.js版本管理工具nvm安装

1.下载nvm https://github.com/coreybutler/nvm-windows/releaseshttps://github.com/coreybutler/nvm-windows/releases 2.安装nvm 双击打开下载好的压缩包解压出的文件 目录中不要有中文 这个是配置切换node版本后的存储位置 然后一路下一步就行了 3.安装并使用node 安装…

LPDDR5电路设计的新功能

最近因为需要使用到LPDDR5&#xff0c;快速地浏览了JEDEC标准文档&#xff0c;发现与前几代相比出现了一些新的电路设计功能&#xff0c;总结为如下三点&#xff1a; 1. CK/WCK/RDQS时钟方案&#xff1b; 2. 电源的PDN设计目标&#xff1b; 3. DQ, DMI和RDQS的Rx端DFE均衡技术。…

LLM大语言模型(十五):LangChain的Agent中使用自定义的ChatGLM,且底层调用的是remote的ChatGLM3-6B的HTTP服务

背景 本文搭建了一个完整的LangChain的Agent&#xff0c;调用本地启动的ChatGLM3-6B的HTTP server。 为后续的RAG做好了准备。 增加服务端role&#xff1a;observation ChatGLM3的官方demo&#xff1a;openai_api_demo目录 api_server.py文件 class ChatMessage(BaseModel…

MySQL编程2

1mysql变量的浮点数问题处理 # mysql变量的浮点数问题处理 set dx3.14,dy3.25; SELECT dxdy3.25; SET resultdxdy; SELECT result; MySQL浮点数计算显示异常&#xff0c;会有很多0出现 2mysql利用变量进行查询操作 # mysql利用变量进行查询操作 set citynameHaarlemmermeer…

Unity 性能优化之GPU Instancing(五)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、GPU Instancing使用方法二、使用GPU Instancing的条件三、GPU Instancing弊端四、注意五、检查是否成功总结 前言 GPU Instancing也是一种Draw call…

AppImage 创建快捷方式

AppImage是什么&#xff1f; AppImage 是一个可下载的 Linux 文件&#xff0c;它内部包含一个应用程序和应用程序所需的一切&#xff08;库、图标、字体等&#xff09;。 官网 https://appimage.org/ 如何运行 AppImage 很简单&#xff0c;下载一个 AppImage&#xff0c;给…

PowerShell ⇒ Excel 批量创建Excel

New-Object -ComObject Excel.Application&#xff1a;创建Excel对象[System.Runtime.Interopservices.Marshal]::ReleaseComObject($excel) | Out-Null 用来显式释放 Excel COM 对象的资源&#xff0c;以确保在脚本执行完成后&#xff0c;释放 Excel 进程和相关资源&#xff0…

揭秘:让代码更优雅的七大面向对象设计秘诀

软件项目中&#xff0c;需求是不断变化的&#xff0c;需求也是项目中最难把控的&#xff0c;需求的变更也是无法避免的。我们写的软件程序&#xff0c;如何能实现拥抱变化&#xff0c;使我们的软件达到可维护和可复用&#xff0c;这是一代代软件工程师不断追寻的真理。 导致一个…

接口数据脱敏实现方案

背景 敏感信息如手机号、身份证、邮箱等信息需要脱敏后展示给前台&#xff0c;如果需要查看&#xff0c;则需要申请权限&#xff0c;查询时需要记录操作日志。 方案 通过JsonSerializer和注解&#xff0c;在json序列化的时候做脱敏操作 此处使用redis存储了加密后的key和明…

认养小游戏功能介绍

认养小游戏通常模拟了真实的农业生产过程&#xff0c;让玩家能够在线上体验种植、养殖的乐趣。以下是一些常见的认养小游戏功能介绍&#xff1a; 选择认养的农产品&#xff1a;首先&#xff0c;玩家可以从游戏中提供的多种农产品中选择自己想要认养的种类&#xff0c;如蔬菜、…

【Java一些注解知识】

RequestMapping RequestMapping是Spring框架中的一个注解&#xff0c;用于将HTTP请求映射到特定的处理方法上。通过使用RequestMapping注解&#xff0c;我们可以指定处理方法应该处理的URL路径和HTTP请求方法。 下面是一个简单的示例&#xff1a; 假设我们有一个UserControl…

[wp]第一届 “帕鲁杯“ --应急响应

1.前言&#xff1a; 第一次做这么大规模的应急响应靶场&#xff0c;收获许多 2.拓补图&#xff1a; 3.资产清单 4.解题 1. 签到[堡垒机的flag标签的值] [BrYeaVj54009rDIZzu4O] 2. 提交攻击者第一次登录时间 2024/04/11/14:21:18 3. 提交攻击者源IP 192.168.1.4 4. 提交…

网络隔离状态下,如何可以安全高效地进行研发文件外发?

研发部门的数据传输通常需要保证数据的安全性、完整性和保密性&#xff0c;尤其是当涉及到公司的核心技术、产品设计、源代码等重要信息时。研发文件外发&#xff0c;即研发资料的外部传输&#xff0c;通常涉及到公司的核心技术和商业机密&#xff0c;因此需要采取严格的安全措…

LayaAir引擎全面支持淘宝小游戏、小程序、小部件的发布

在最新的3.1版本和2.13版本中&#xff0c;LayaAir引擎已经全面支持了淘宝小游戏、小程序和小部件的开发和发布。这一重大更新&#xff0c;标志着LayaAir引擎与电商巨头阿里巴巴旗下的淘宝平台形成生态合作&#xff0c;在为广大开发者提供更加强大、高效的跨平台开发工具和解决方…

c++11 标准模板(STL)本地化库 - 平面类别(std::money_get) - 从输入字符序列中解析并构造货币值

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 平面类别 从输入字符序列中解析并构造货币值 std::money_get template<…

Unity-NGUI爆错以后-导致不能多次点击,UI假卡死问题解决方法

太久没用&#xff0c;忘了&#xff0c;NGUI好像易出错&#xff0c;就再次点击不了 导致打开了UI关闭不了&#xff0c;每次都要重启就比较烦&#xff08;说的就是那种美术团队&#xff0c;一个 UI 打开几十层&#xff09; 就好比【左上角&#xff0c;箭头】点第二次是退出不了了…

【Mac】Hype 4 Pro for Mac(HTML5动画制作软件)v4.1.17安装激活教程

软件介绍 Hype 4 Pro是一款专业的HTML5动画和交互式内容制作软件&#xff0c;适用于Mac平台。它的主要特点和功能包括&#xff1a; 1.HTML5动画制作&#xff1a; Hype 4 Pro提供了直观的界面和丰富的工具&#xff0c;帮助用户轻松创建各种复杂的HTML5动画效果&#xff0c;包括…

每天五分钟计算机视觉:使用极大值抑制来寻找最优的目标检测对象

本文重点 在目标检测领域,当模型预测出多个候选框(bounding boxes)时,我们需要一种方法来确定哪些候选框最有可能表示真实的目标。由于模型的不完美性和图像中目标的重叠性,往往会有多个候选框对应于同一个目标。此时,极大值抑制(Non-Maximum Suppression,NMS)技术就…

stm32学习探究:利用TB6612驱动直流电机

在这篇文章中&#xff0c;我们将探讨如何使用STM32微控制器和TB6612FNG直流电机驱动模块来驱动直流电机。TB6612FNG是一款基于MOSFET的H桥集成电路&#xff0c;能够独立双向控制两个直流电机&#xff0c;非常适合用于小型机器人或双轮车等项目。 一、TB6612FNG 驱动模块介绍 …

【设计模式学习笔记】设计模式的分类

目录 分类创建型模式创建型模式之间的对比 结构型模式结构型模式之间的对比 行为型模式行为型模式之间的对比 总结小提醒 参考 分类 常规的分类方式是根据其作用来划分&#xff0c;总共有三类&#xff1a;创建型模式、结构型模式和行为型模式。 创建型模式 该模式提供了一种…