首页 > 其他分享 >高精度

高精度

时间:2024-07-07 19:08:34浏览次数:11  
标签:高精度 int s2 s1 len1 MAXN size

高精度

高精度,即无法使用 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--; //删除前导0
	for(;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--; //删除前导0
	for(;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--; //删除前导0
	for(;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++; //删除前导0
	for(int i=len;i<len1;i++) cout<<c[i]; //输出
}

总结

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

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

标签:高精度,int,s2,s1,len1,MAXN,size
From: https://www.cnblogs.com/zhangyuyi1218/p/-/High_accuracy_algorithm

相关文章

  • c++ u7-02-高精度乘法
    本节课作业:链接:https://pan.baidu.com/s/13-FC86jSHGziRDA8lqzimg?pwd=owv1提取码:owv1   高精度乘法             #include<iostream>#include<cstdio>#include<cstring>usingnamespacestd;stringx,y;inta......
  • 高精度模板
    转载自wkh2008。#include<bits/stdc++.h>usingnamespacestd;namespaceBIGINT{usingcpx=complex<double>;constdoublePI=acos(-1);vector<cpx>roots={{0,0},{1,0}};voidensure_capacity(intmin_capacity){for(intlen=r......
  • c++高精度计算-大整数相乘
    例题-信奥赛1307:【例1.3】高精度乘法题目描述:输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数的积。输入:输入两个高精度正整数M和N。输出:求这两个高精度数的积。输入样例:363输出样例:108 做题思路:学习乘法的朋友大概对加减法都有一定的了解,我就......
  • 高精度乘法的实现
             这是C++算法基础-基础算法专栏的第九篇文章,专栏详情请见此处。引入        上次我们学习了高精度加法的实现,这次我们要学习高精度减法的实现。        高精度乘法与高精度加法的定义、前置过程都是大致相同的,如果想了解具体内容,可以移......
  • LabVIEW与3D相机开发高精度表面检测系统
    使用LabVIEW与3D相机开发一个高精度表面检测系统。该系统能够实时获取三维图像,进行精细的表面分析,广泛应用于工业质量控制、自动化检测和科学研究等领域。通过真实案例,展示开发过程中的关键步骤、挑战及解决方案,确保系统的高性能和可靠性。随着工业自动化和智能制造的发展,精......
  • AP2400 5-150V 10-6000mA 耐高温 高精度 降压恒流LED驱动芯片 手电筒电动车照明灯
    产品描述AP2400是一款PWM工作模式,高效率、外围简单、外驱功率管,适用于输入的高精度降压LED恒流驱动芯片。外驱MOS,最大输出电流可达6A。AP2400可实现三段功能切换,通过MODE1/2/3切换三种功能模式:全亮,半亮,爆闪AP2400工作频率固定在150KHZ左右,同时内置抖频电路,可以......
  • 数据采集与控制 > 声音与振动 > PCI8811,该板卡是一款为测试音频和振动信号而设计的高精
    每通道集成独立的IEPE激励源,可实现加速度传感器及麦克风等相关的信号调理。信息社会的发展,在很大程度上取决于信息与信号处理技术的先进性。数字信号处理技术的出现改变了信息与信号处理技术的整个面貌,而数据采集作为数字信号处理的必不可少的前期工作在整个数字系统中起到关......
  • MS1202N激光测距用高精度时间测量(TDC)电路
    MS1202N是一款高精度时间测量(TDC)电路,具有四通道、多脉冲的采样能力、高速SPI通讯、多种测量模式,适合于激光雷达和激光测距。主要特点测量范围1:◼四通道,最小分辨率65ps◼测量范围0-1.8μs◼间隔脉冲分辨能力为15ns,每个......
  • 【开源样本库分享】Five-Billion-Pixels-ENVIFormat 五十亿像素高精度样本库分享
    很高兴给大家分享一个好消息,Five-Billion-Pixels-ENVIFormat五十亿像素开源样本库(ENVI格式)正式上线了!Five-Billion-Pixels样本库是一个为遥感、地理信息系统(GIS)和图像处理领域的研究和应用而精心打造的高质量样本库。为了让更多的人受益,我们决定制作并发布ENVI格式的五十亿像素......
  • java基于Vue+Spring boot前后端分离架构开发的一套UWB技术高精度定位系统源码
    java基于Vue+Springboot前后端分离架构开发的一套UWB技术高精度定位系统源码系统采用UWB高精度定位技术,可实现厘米级别定位。UWB作为一种高速率、低功耗、高容量的新兴无线局域定位技术,目前应用主要聚焦在室内外精确定位。在工业自动化、物流仓储、电力巡检、煤矿施工、自动......