高精度

高精度

高精度,即无法使用 C++ 本身配置的数据类型中使用的运算

高精度加法

例题:P1601 A+B Problem

主要方法:

  • 使用字符串存储数字
  • 转换为整型数组
  • 模拟竖式加法
  • 逆序输出

Code

#include <iostream>
using namespace std;
#define MAXN 10005
string s1,s2;
int a[MAXN],b[MAXN],c[MAXN];
int main()
{cin>>s1>>s2; //输入int len1=s1.size(),len2=s2.size(); //两者的长度int len=max(len1,len2); //两者较长的长度for(int i=0;i<len1;i++) a[i]=s1[len1-1-i]-48; //逆序存储a(s1)for(int i=0;i<len2;i++) b[i]=s2[len2-1-i]-48; //逆序存储b(s2)int xx=0,i;for(i=0;i<len;i++){c[i]=a[i]+b[i]+xx; //相加xx=c[i]/10; //处理进位c[i]%=10;}c[i]=xx; //处理最高位又进一位的情况while(c[i]==0&&i>0) i--; //删除前导0for(;i>=0;i--) cout<<c[i]; //反向输出return 0;
}

高精减

例题:P2142 A-B Problem。

和上面差不多。

主要方法:

  • 使用字符串存储数字
  • 转换为整型数组
  • 模拟竖式减法
  • 逆序输出

Code

#include <iostream>
using namespace std;
#define MAXN 10005
string s1,s2;
int a[MAXN],b[MAXN],c[MAXN];
int main()
{cin>>s1>>s2; //输入int len1=s1.size(),len2=s2.size(); //两者的长度if(s1>s2&&len1==len2||len1<len2) //负数处理{swap(s1,s2);swap(len1,len2);cout<<"-";}for(int i=0;i<len1;i++) a[i]=s1[len1-1-i]-48; //逆序存储a(s1)for(int i=0;i<len2;i++) b[i]=s2[len2-1-i]-48; //逆序存储b(s2) int i;for(i=0;i<len1;i++) //高精减法{c[i]=a[i]-b[i];if(c[i]<0){a[i+1]--;c[i]+=10;}}while(c[i]==0&&i>0) i--; //删除前导0for(;i>=0;i--) cout<<c[i]; //反向输出return 0;
}

高精乘

例题:P1303 A*B Problem

主要方法:

  • 使用字符串存储数字
  • 转换为整型数组
  • 模拟竖式乘法
  • 逆序输出

Code

#include <iostream>
using namespace std;
#define MAXN 10005;
string s1,s2;
int a[MAXN],b[MAXN],c[2*MAXN];
int main(){cin>>s1>>s2;int len1=s1.size(),len2=s2.size();for(int i=0;i<len1;i++) a[i]=s1[len1-1-i]-48; //逆序存储a(s1)for(int i=0;i<len2;i++) b[i]=s2[len2-1-i]-48; //逆序存储b(s2)for(int i=0;i<len2;i++) for(int j=0;j<len1;j++) c[i+j]+=a[j]*b[i]; //高精乘法int len=len1+len2;for(int i=0;i<len;i++){c[i+1]+=c[i]/10; //进位c[i]%=10;}while(c[len]==0&&len>0) len--; //删除前导0for(;len>=0;len--) cout<<c[len]; //反向输出return 0;
}

高精除(高精除单精)

例题:P1480 A/B Problem

主要方法:

  • 使用字符串存储数字
  • 转换为整型数组
  • 模拟竖式除法
  • 逆序输出

Code

#include <iostream>
using namespace std;
#define MAXN 10005
string s;
long long x;
int a[MAXN],c[MAXN];
int main(){cin>>s>>x; //输入int len1=s.size();for(int i=0;i<len1;i++) a[i]=s[i]-48; //存储 long long y=0;for(int i=0;i<len1;i++) //高精除{c[i]=(y*10+a[i])/x; //除法y=(y*10+a[i])%x; //不断往后推}int len=0;while(c[len]==0&&len<len1-1) len++; //删除前导0for(int i=len;i<len1;i++) cout<<c[i]; //输出
}

总结

其实高精度大部分都是模拟人类的计算方法,就比如列竖式,只要弄清楚他们,高精就能写好。

更好的阅读体验?推荐 该文!

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

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

相关文章

Linux 提权-SUID/SGID_2

本文通过 Google 翻译 SUID | SGID Part-2 – Linux Privilege Escalation 这篇文章所产生,本人仅是对机器翻译中部分表达别扭的字词进行了校正及个别注释补充。导航0 前言 1 上文回顾 2 枚举自定义 SUID 二进制文件 3 利用 SUID 二进制文件 – 共享对象注入3.1 使用 Strings …

配置与管理squid代理服务器

应用背景如下图所示, 公司用squid作代理服务器,代理服务器内网IP地址为192.168.200.1,外网IP为192.168.200.3公司内网所用IP地址段为192.168.200.0/24,并且想用8080作为代理端口。1: 配置非透明代理 1.1 、配置主机网络 准备三台Linux主机,第一台为外网主机名为www,网卡…

RedHat7.4—配置常规网络

配置主机名 把主机名修改为hyborn 方法一、使用nmtui修改主机名 需要管理员权限运行su -root输入root密码后进入管理员模式 运行nmtui通过上下左右选择菜单栏回车选择,进入设置系统名即可设置确定后退出 运行hostnamectl status 命令查看主机名,查看到的主机名,即可以看到St…

RedHat7.4—配置远程管理Linux服务器

公司的Linux服务器需24小时不间断工作,维护工程师希望通过设置能远程管理和维护服务器。要求通过SSH及VNC远程管理,实现如下配置需求:可以通过SSH服务访问远程主机,可以使用证书登录远程主机,不需要输入远程主机的用户名和密码 可以使用VNC服务访问远程主机,使用图形界面…

Ping 不通 虚拟机

Ping 不通虚拟机 更换位置后,IP不会动态变化,切换网络配置信息来解决

Yet Another Permutation Constructive

这道题目不用写,因为必须要求用kotlin语言 讲一下我做这道题目的过程 我最开始正着想,如果\(k\)比较大的话,我们就想一次删的数少一点,所以考虑一次操作有哪些数被保留,于是我们发现,原序列的极大值点会被保留,于是一次操作被保留的数最多的情况就是如下的波浪形:然后我…

ComfyUI进阶篇:ComfyUI核心节点(三)

ComfyUI核心节点(三)前言:学习ComfyUI是一场持久战。当你掌握了ComfyUI的安装和运行之后,会发现大量五花八门的节点。面对各种各样的工作流和复杂的节点种类,可能会让人感到不知所措。在这篇文章中,我们将用通俗易懂的语言对ComfyUI的核心节点进行系统梳理,并详细解释每…

版本控制系统

GIT 分布式版本控制系统 分布式版本控制,没有中央服务器的概念,每个人都有自己的版本库,因此每个人在工作时候,不需要联网,版本库本地即可管理。 既然每个人都是一个完整的版本库,同事之间如果需要协作开发,就需要找一个用于“交换文件”的中央服务器,这个服务器不存在…

2024-07-07 如何把ipad当作windows副屏使用 ==》 通过软件dute display和数据线连接

windows:进入dutedisplay官网https://www.duetdisplay.com/zh#download,下载并安装 ipad:在苹果应用商店搜索dutedisplay,选中并下载注意:你需要注册一个dutedisplay账号,才能登录该软件,它是付费的,so,我看到付费我就放弃了。 如果,你给钱了,那么,接下来我也不知道…

AtCoder Beginner Contest 361

AtCoder Beginner Contest 361 A - Insert给定一个长度为\(N\)的序列\(A\),现在希望将数字\(X\)插入到序列的第\(K\)个数字后面,变成一个新的序列\(B\)。输出序列\(B\)。 \(K,N,A_i,X\le 100\)模拟题。先读入\(N,K,X\)。接着在读入\(A\)的过程中一遍读入一遍输出,如果读到了…

2024暑假第一周总结

JAVA开发环境搭建和HelloWorld编译 1、JDK安装(java开发环境安装) 更改环境变量 Path环境变量 Path环境变量用于记住程序路径,方面在命令行窗口的任意目录启动程序 老版本的jdk需要进行配置环境变量,将jdk和bin包路径复制,新建path路径 Java_home环境变量 告诉操作系统JDK…

前端取唯一标识 UUID

// 使用工具 fingerprintjs 可以简单取到UUID1 <!DOCTYPE html>2 <html lang="en">3 4 <head>5 <meta charset="UTF-8">6 <meta http-equiv="X-UA-Compatible" content="IE=edge">7 <meta nam…