(模板)高精度算法

【算法模板】高精度减法模板 简述 高精度,字面意思理解,精度高,位数很多,一个数的位数可能是1e3甚至更高 应用:手动模拟大整数的减法 两个位数很大,位数可能达到1e3甚至更高的数减法运算直接存储无法存储,常规使用字符串或者数组来存储时间复杂度是O(max(M,N)),但是空间复杂度是2(M+N)。M和N分别是两个数的位数大小 算法基本策略 模拟两个数进行减法运算。 高精度减法模板 大整数的存储是低位在前面,高位在后面,即数组最前面表示的是个位,依次向后是十位,百…。 下面的模板是保证a的位数>=b的位数,并且a>=b的 阅读详情

高精度加法,减法,乘法,通过重载运算符及自定义数据类型实现;

#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
using namespace std;
const int N=4005;
char A[N],B[N];
struct data{
    int len;
    int v[N];
    data(){
        memset(v,0,sizeof(v));
    }
    void print(){
        for(int i=len;i;i--)
            cout<<v[i];
        cout<<endl;
    }
};
bool operator<(data a,data b)
{
    if(a.len<b.len)return true;
    if(a.len>b.len)return false;
    for(int i=a.len;i;i--){
        if(a.v[i]<b.v[i])return true;
        if(a.v[i]>b.v[i])return false;
    }
    return false;
}
data operator+(data a,data b)
{
    data ans;
    ans.len=max(a.len,b.len);
    for(int i=1;i<=ans.len;i++)
        ans.v[i]=a.v[i]+b.v[i];
    for(int i=1;i<=ans.len;i++){
        ans.v[i+1]+=ans.v[i]/10;
        ans.v[i]%=10;
    }
    if(ans.v[ans.len+1])ans.len++;
    return ans;
}
data operator-(data a,data b)//a>b!!!
{
    data ans;
    ans.len=a.len;
    for(int i=1;i<=a.len;i++){
        if(a.v[i]<b.v[i])a.v[i]+=10,a.v[i+1]--;
        ans.v[i]=a.v[i]-b.v[i];
    }
    while(!ans.v[ans.len]&&ans.len>1)ans.len--;
    return ans;
}
data operator*(data a,data b)
{
    data ans;
    ans.len=a.len+b.len;
    for(int i=1;i<=a.len;i++)
        for(int j=1;j<=b.len;j++)
            ans.v[i+j-1]+=a.v[i]*b.v[j];
    for(int i=1;i<=ans.len;i++){
        ans.v[i+1]+=ans.v[i]/10;
        ans.v[i]%=10;
    }
    while(!ans.v[ans.len]&&ans.len>1)ans.len--;//注意必须加上ans.len>1,否则有一个数为0时会re

    return ans;
}
int main()
{
    //gets(A+1);gets(B+1);
    //cin.getline(A+1,sizeof(A));cin.getline(B+1,sizeof(B));
    scanf("%s",A+1);scanf("%s",B+1);//几种读取方法
    data a,b,c;
    a.len=strlen(A+1);b.len=strlen(B+1);
    for(int i=1;i<=a.len;i++)
        a.v[i]=A[a.len-i+1]-'0';
    for(int i=1;i<=b.len;i++)
        b.v[i]=B[b.len-i+1]-'0';
//    if(a<b){
//        c=a;a=b;b=c;cout<<'-';//如果是减法必须把两个数交换再减
//    }
//    c=a-b;
    c=a*b;
    c.print();

    return 0;
}

另一个看起来更完善的模板:

#include <iostream>
#include <string>
#include <cstring>
#include <cstdio>
using namespace std;

const int maxn = 1000;

struct bign{
    int d[maxn], len;

    void clean() { while(len > 1 && !d[len-1]) len--; }

    bign()          { memset(d, 0, sizeof(d)); len = 1; }
    bign(int num)   { *this = num; } 
    bign(char* num) { *this = num; }
    bign operator = (const char* num){
        memset(d, 0, sizeof(d)); len = strlen(num);
        for(int i = 0; i < len; i++) d[i] = num[len-1-i] - '0';
        clean();
        return *this;
    }
    bign operator = (int num){
        char s[20]; sprintf(s, "%d", num);
        *this = s;
        return *this;
    }

    bign operator + (const bign& b){
        bign c = *this; int i;
        for (i = 0; i < b.len; i++){
            c.d[i] += b.d[i];
            if (c.d[i] > 9) c.d[i]%=10, c.d[i+1]++;
        }
        while (c.d[i] > 9) c.d[i++]%=10, c.d[i]++;
        c.len = max(len, b.len);
        if (c.d[i] && c.len <= i) c.len = i+1;
        return c;
    }
    bign operator - (const bign& b){
        bign c = *this; int i;
        for (i = 0; i < b.len; i++){
            c.d[i] -= b.d[i];
            if (c.d[i] < 0) c.d[i]+=10, c.d[i+1]--;
        }
        while (c.d[i] < 0) c.d[i++]+=10, c.d[i]--;
        c.clean();
        return c;
    }
    bign operator * (const bign& b)const{
        int i, j; bign c; c.len = len + b.len; 
        for(j = 0; j < b.len; j++) for(i = 0; i < len; i++) 
            c.d[i+j] += d[i] * b.d[j];
        for(i = 0; i < c.len-1; i++)
            c.d[i+1] += c.d[i]/10, c.d[i] %= 10;
        c.clean();
        return c;
    }
    bign operator / (const bign& b){
        int i, j;
        bign c = *this, a = 0;
        for (i = len - 1; i >= 0; i--)
        {
            a = a*10 + d[i];
            for (j = 0; j < 10; j++) if (a < b*(j+1)) break;
            c.d[i] = j;
            a = a - b*j;
        }
        c.clean();
        return c;
    }
    bign operator % (const bign& b){
        int i, j;
        bign a = 0;
        for (i = len - 1; i >= 0; i--)
        {
            a = a*10 + d[i];
            for (j = 0; j < 10; j++) if (a < b*(j+1)) break;
            a = a - b*j;
        }
        return a;
    }
    bign operator += (const bign& b){
        *this = *this + b;
        return *this;
    }

    bool operator <(const bign& b) const{
        if(len != b.len) return len < b.len;
        for(int i = len-1; i >= 0; i--)
            if(d[i] != b.d[i]) return d[i] < b.d[i];
        return false;
    }
    bool operator >(const bign& b) const{return b < *this;}
    bool operator<=(const bign& b) const{return !(b < *this);}
    bool operator>=(const bign& b) const{return !(*this < b);}
    bool operator!=(const bign& b) const{return b < *this || *this < b;}
    bool operator==(const bign& b) const{return !(b < *this) && !(b > *this);}

    string str() const{
        char s[maxn]={};
        for(int i = 0; i < len; i++) s[len-1-i] = d[i]+'0';
        return s;
    }
};

istream& operator >> (istream& in, bign& x)
{
    string s;
    in >> s;
    x = s.c_str();
    return in;
}

ostream& operator << (ostream& out, const bign& x)
{
    out << x.str();
    return out;
}
【算法模板】高精度加法模板 简述 高精度,字面意思理解,精度高,位数很多,一个数的位数可能是1e3甚至更高 应用:手动模拟大整数的加法 两个位数很大,位数可能达到1e3甚至更高的数加法运算直接存储无法存储,常规使用字符串或者数组来存储时间复杂度是O(max(M,N)),但是空间复杂度是2(M+N)。M和N分别是两个数的位数大小 算法基本策略 模拟两个数进行加法运算。 高精度加法模板 考虑到进位问题,所以大整数的存储是低位在前面,高位在后面,即数组最前面表示的是个位,依次向后是十位,百…。 vector<int> add 阅读详情

相关推荐

算法模板——高精度乘除模板

高精度乘除模板

m0_74404678的博客 366

【算法模板】高精度模板(带图详解)

高精度模板(加减乘除)

Z1tai的博客 2320

acm大数高精度模板

转载自他人博客 分享使用

【基础算法模板】高精度(加减乘除)

【AcWing模板】修改

2201_75769764的博客 2267

高精度算法(很好用)

It is a module for high precision programming,it over-loads some useful operator includes "+" ,"-" , "*" ,"/" . Because of my pool progr-amming skill, some algo- rithms and functions can be optimized in other ways and some other algorithms a- bout high precision programming havn't provided.

高精度模板(C语言)

高精度算法必备模板,包括大数的加减乘除运算。

高精度运算

文章目录前言一、高精度运算概述二、高精度算法1. 高精度加法AcWing791. 高精度加法高精度加法模板AC代码2.高精度减法AcWing 792. 高精度减法3.高精度乘法AcWing 793. 高精度乘法4.高精度除法AcWing 794. 高精度除法三、时间复杂度 前言 复习acwing算法基础课的内容,本篇为讲解基础算法:高精度运算,关于时间复杂度:目前博主不太会计算,先鸽了,日后一定补上 一、高精度运算概述 我们都知道,我们定义一个数,不论是整数还是浮点数,它都是有范围的都是有限的,就拿u.

佛系更新 3539

RocketMQ源码分析之消息轨迹

文章目录前言一、消息轨迹二、消息轨迹源码分析1、producer端2、consumer端三、消息轨迹中存储的信息1.TraceContext2.TraceBean3.TraceType四、总结 前言   本篇文章将会从以下方面介绍消息轨迹:什么是消息轨迹?如何启用消息轨迹?示例demo、消息轨迹的源码分析和消息轨迹中存储的信息。最后会用一张图来总结消息轨迹的工作原理。 一、消息轨迹 1.什么是消息轨迹? 消息轨迹是用来跟踪记录消息发送、消息消费的轨迹。 2.如何启用消息轨迹? broker端 需要在b

不爱学习的小妞博客 1076

高精度算法模板

核心是:借位以及存在负数的情况。

OYYHXPJR的博客 504

使用 Claude Skills 构建专业级 AI Agent:技术实践指南

Claude Skills(也称)是一组基于文件系统的可重用资源包,为 Claude 提供特定领域的专业知识、标准化工作流程和最佳实践。与传统一次性 Prompt 不同,Skills 是持久化、自动触发、支持代码执行的智能模块。让 AI 真正理解并执行你的工作方式。Claude Skills 正在重新定义 AI 助手的边界——从“回答问题”升级为“执行专业工作的能力”。其可组合、可移植、高效、强大的特性,使其成为自动化重复任务、标准化工作流、提升团队效率的理想工具。未来已来。

weixin_44058951的博客 2226

使用Xpath语法爬取豆瓣读书Top250

使用Xpath语法爬取豆瓣读书Top250 使用的软件是Spyder 网页地址:https://book.douban.com/top250?start=0 直接上代码: # -*- coding: utf-8 -*- """ Created on Thu Apr 30 18:35:17 2020 @author: ASUS """ import requests import csv fr...

weixin_43987253的博客 2081

高精度算法解析和高精度赛场用模板(附C++代码实现)

高精度算法,又称数值处理算法。意在通过数组模拟较大整数的存储和使用。本篇文章就会给大家介绍赛场上使用的精简版高精度算法模版。首先定义一个高精度结构体。用数组a储存这个数,用变量len储存这个数的长度。MAXN代表数组a的最大长度。1010。

Pantheraonca的博客 998

【教程4>第5章>第28节】基于帧同步+相位同步+位同步的QPSK调制解调通信系统整体性能分析

综上所述:1.SNR<10db时,整体性能下降,当SNR=0db时,系统无法正常工作。2.gardner环性能达到2.5e-5时偏可以正常工作,增加之后无法正常工作。3.当相位偏差大于pi/4的时候,对最后的性能会有一定影响。

FPGA/MATLAB学习教程/源码/项目合作开发 556

【高精度算法C++模板】

高精度算法的C++模板

博客网站地址: https://arsenova.xyz 我会将优快云上的博客重修一部分迁移到网站上。 文章会做同步更新,但我不会在这个糟糕的平台多待1秒。下面是我要说的话,save your time. keep going 872

Python爬虫实战:利用Playwright+Asyncio高效获取淘宝商品价格变化曲线

本文将详细介绍如何使用Python最新技术栈(Playwright+Asyncio)构建一个高效的淘宝商品价格监控爬虫系统。我们将从爬虫基础知识讲起,逐步深入到反爬应对策略、数据存储与分析,最终实现价格变化曲线的可视化展示。文章包含完整的代码实现和详细的技术解析,适合中高级Python开发者学习参考。关键词:Python爬虫、Playwright、Asyncio、淘宝价格监控、数据可视化支持多浏览器(Chromium, Firefox, WebKit)更快的执行速度更丰富的API。

2201_76125261的博客 244

具身智能:原理、算法与系统 第1章 具身智能的本质与范畴

从学术定义的角度,具身智能可被界定为"与物理环境进行有目的的能量与信息交换"的智能形式。这一定义揭示了具身智能的两个本质维度:信息处理维度与能量交互维度。与传统人工智能系统仅在信息空间操作不同,具身智能系统必须同时处理信息流与能量流,在物理约束下实现感知、认知与行动的统一。具身智能体具有三个核心构成要素:物理身体(Physical Body)、感知系统(Sensory System)与效应器(Effectors)。这三者共同构成了感知与行动的基础,使智能体能够通过物理交互而非纯粹符号操作来理解世界。

VectorShift的博客 270

一、基础算法4:高精度 模板题+算法模板(高精度加法,高精度减法,高精度乘法,高精度除法)

一、基础算法4:高精度 模板题+算法模板(高精度加法,高精度减法,高精度乘法,高精度除法)

GCTTTTTT的博客 570

Android 13.0 双屏时触摸失效问题排查与修复

摘要:本文记录了RK3588 Android12开发板上主屏触摸失效问题的排查与解决过程。通过分析发现,USB触摸设备被错误关联到辅屏(displayId=3)而非主屏(displayId=0)。解决方案是修改TouchInputMapper.cpp,强制触摸设备使用INTERNAL viewport(主屏),并保持设备在viewport不活跃时仍启用。该修改涉及约40行代码,有效解决了多显示器环境下触摸设备错误映射的问题,同时提供了详细的调试方法和注意事项。

ip0417的博客 353

高精度算法模板(转载)

高精度算法模板(转载) 本文转载自 https://blog.youkuaiyun.com/u013615904/article/details/43373601 在这里,我们约定,能用int表示的数据视为单精度,否则为高精度。所有函数的设计均采用带返回值的形式。 本文包含 1.高精度加法 2.高精度减法 3.高精度乘法 1)高精度乘高精度的朴素算法 2)高精度乘高精度FFT优化算法 3)高精度乘单精度 4....

qq_41086629的博客 398

深度学习论文: AnomalyDINO: Boosting Patch-based Few-shot Anomaly Detection with DINOv2

通过将DINOv2模型适应到一次性和少量异常检测中,并专注于工业应用少量异常检测。实验表明,这种方法不仅与现有技术相匹敌,甚至可以在许多设置中超越它们。我们提出的仅视觉方法AnomalyDINO基于补丁相似性,能够实现图像级别的异常预测和像素级别的异常分割。该方法在方法论上很简单,无需训练,因此不需要任何额外的数据进行微调或元学习。

mingo_敏 1903

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

高精度加减乘除算法模板

首先,我们要知道高精度算法是C++才用的,Java中是不需要高精度算法的。高精度加法: 两个大的数相加 (数的范围是 大约为10^6)一个大的数(vector存储),乘上一个小的数(int存储)高精度整数 除上低精度整数。这里用vector来做。

m0_74228185的博客 417

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【以无克有】高精度算法模板

去年下半年开始写模拟题,始终觉得进步是难的,后来朋友一番话点醒:“模拟终归是经验之谈,你既无算法逻辑,又无模板工具,做完大把模拟题也不过是增加语法知识”

xiexunshizz的博客 258

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

C++高精度算法终极武器:大数运算模板全公开

O(n²) → 需结合FFT优化实现O(n log n):仅演示除以普通整数的场景,高精度除法需实现试除法。:重载>>和<<运算符支持流式输入输出。:统一先处理绝对值,最后添加符号。🔹 ACM-ICPC大数相关赛题。:所有运算后必须清理多余前导零。:不同压位方式的数字需统一处理。:低位在前(方便进位处理)减少vector扩容次数。:除法运算前检查除数合法性。:处理非数字字符和空字符串。:实现与基本类型的隐式转换。:加法进位溢出特殊处理。:逐位处理进位与借位。:先比长度再逐位比较。🔹 大数加密算法实现。

2201_75933169的博客 863

【模板】高精度算法

这其实就是一个高精度模板 题目描述 输入两个整数a、ba、b,求两个数的四则运算结果。 输入格式 输入第一行包含一个整数TT,第二行包含两个整数a、ba、b。 当T=1T=1,表示计算a+ba+b 当T=2T=2,表示计算a−ba−b 当T=3T=3,表示计算a∗ba∗b 当T=4T=4,表示计算a/b,a%ba/b,a%b 输出格式 输出题目中描述运算的结果。 样例一 i...

weixin_34161032的博客 83
上一篇: POJ3181
下一篇: CF473 DIV2 D. Mahmoud and Ehab and another array construction task
HumveeA6
博客等级 码龄17年 12粉丝 175原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值