首页 > 其他分享 >高精度模版

高精度模版

时间:2023-11-21 10:22:18浏览次数:38  
标签:高精度 int 模版 back -- vector push size

高精度加法

vector<int> add(vector<int> &A, vector<int> &B) {  //654321 654321
    vector<int> C;  
    int temp = 0;  
    for (int i = 0; i < A.size() || i < B.size(); ++i) {  
        if (i < A.size())temp += A[i];  
        if (i < B.size())temp += B[i];  
        C.push_back(temp % 10);  
        //这里除10导致进位的1会被保留!做下一位运算时的计算是:temp = A+B+是否有进位的1
        temp /= 10;//temp/=10的结果只能是0或1
    }  
    if (temp)C.push_back(1);  
    return C;  
}  
  
void high_precision() {  
    string a, b;  
    vector<int> A, B;  
    cin >> a >> b;// 123456 123456  
    for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');//654321  
    for (int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');//654321  
    vector<int> c = add(A, B);  
    for (int i = c.size() - 1; i >= 0; i--) printf("%d", c[i]);  
}

高精度减法

bool compare(vector<int> &a, vector<int> &b) {  
    if (a.size() != b.size()) return a.size() > b.size();  
    for (int i = a.size() - 1; i >= 0; i--)//此时a, b位数相同
        if (a[i] != b[i])return a[i] > b[i];  
    return true;//此时a == b  
}  
  
/**  
 * // C = A - B, 满足A >= B, A >= 0, B >= 0
 * @param A * @param B * @return */
vector<int> sub(vector<int> &a, vector<int> &b) {  
    vector<int> c;  
    for (int i = 0, t = 0; i < a.size(); ++i) {  
        t = a[i] - t;//1. t = a[i] -b[i] -t;-t是因为考虑借位的情况, 这里的t只能是1或0  
        if (i < b.size()) t -= b[i];//这里因为b位数小于a,要判断一下b的位数是否存在  
        c.push_back((t + 10) % 10);//2. 将当前位插入数组  
        if (t < 0) t = 1; else t = 0;//3. 控制进位变量  
    }  
    while (c.size() > 1 && c.back() == 0)c.pop_back();//注意是逆序,抹除0需要用back()  
    return c;  
}  
  
void high_precision_sub() {  
    string a, b;  
    vector<int> A, B;  
    cin >> a >> b;// 123456 123456  
    for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');//654321  
    for (int i = b.size() - 1; i >= 0; i--) B.push_back(b[i] - '0');//654321  
    vector<int> c;  
    if (compare(A, B)) {  
        c = sub(A, B);  
        for (int i = c.size() - 1; i >= 0; i--) printf("%d", c[i]);  
    } else {  
        c = sub(B, A);  
        printf("-");  
        for (int i = c.size() - 1; i >= 0; i--) printf("%d", c[i]);  
    }  
}

高精度乘法

vector<int> mul(vector<int> &A, int b) {  
    vector<int> c;  
    int t = 0;//进位  
    for (int i = 0; i < A.size() || t; ++i) {  
        if (i < A.size())t += A[i] * b;//用高精度的一位乘以普通数  
        c.push_back(t % 10);  
        t /= 10;  
    }  
    while (c.size() > 1 && c.back() == 0)c.pop_back();//注意是逆序,抹除0需要用back()  
    return c;  
}  
  
void high_precision_mul() {  
    string a;  
    int b;  
    vector<int> A;  
    cin >> a >> b;// 123456 3  
    for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');//654321  
    vector<int> c = mul(A, b);  
    for (int i = c.size() - 1; i >= 0; i--) printf("%d", c[i]);  
  
}

高精度除法

vector<int> div(vector<int> &A, int b, int &r) {  
    vector<int> c;  
    r = 0;  
    for (int i = A.size() - 1; i >= 0; i--) {  
        r = r * 10 + A[i];  
        c.push_back(r / b);  
        r %= b;  
    }  
    reverse(c.begin(), c.end());  
    while (c.size() > 1 && c.back() == 0)c.pop_back();  
    return c;  
}  
  
void high_precision_div() {  
    string a;  
    int b;  
    vector<int> A;  
    cin >> a >> b;// 123456 3  
    for (int i = a.size() - 1; i >= 0; i--) A.push_back(a[i] - '0');//654321  
    int r;  
    vector<int> c = div(A, b, r);  
    for (int i = c.size() - 1; i >= 0; i--) printf("%d", c[i]);  
    cout << endl << r << endl;  
}

标签:高精度,int,模版,back,--,vector,push,size
From: https://www.cnblogs.com/yabushier/p/17845633.html

相关文章

  • Dynamic CRM 组织服务对Word模版生成PDF文件
    目的:解决用户手动下载word模版再上传问题解决方案:组织服务直接对指定的word模版文件生成PDF文件流1.word模版必须上传到系统文档模版后:设置->模版->文档模版 2.组织调用“ExportpdfDocument”,返回PDF文件字节信息。另外实体信息需要把“注释”勾选上,否则执行代码会报错,如下:......
  • 08.模版技术
    简介Web程序里,访问一个地址通常会返回一个包含各类信息的HTML页面。其中包含变量和运算逻辑的HTML或其他格式的文本叫做模板,执行这些变量替换和逻辑计算工作的过程被称为渲染。Flask模板渲染是通过Jinja2引擎来完成的。默认情况下,Flask会从模块同级的 templates 目录......
  • 抖音私信群发工具cookie,批量导入UID安全码,易语言谷歌模版开源
    用精易浏览器的谷歌模版开发的工具,最主要的是可以多账号登录抖音号,而且可以导入COOKIE,也能提取cookie,就实现了一种多账号私信的效果,可以搭配代理IP效果的,这个我没加入,我就分享下源码,开源就行了,软件基础都设计好了,可以实现的功能就是可以多账号登录【cookie写入本地txt分割】然后导......
  • 写了个高精度加法板子
    #include<bits/stdc++.h>using namespace std;const int N=1e4+9;int a1[1000],b1[1000],ans[1000];void add(int a[],int b[],int na,int nb){int t=0;if(na<nb)return add(b,a,nb,na);for(int i=0;i<na;i++){t+=a[i];if(i<nb)t+=b[i];ans[i]=t%10;t/=10;}if(......
  • C#使用NPOI 读取并修改 Excel 模版(移动行,增加行)
    准备一下:templatePath为模版路径,初始化workbookvarworkbook=newXSSFWorkbook(File.OpenRead(templatePath));varsheet=workbook.GetSheetAt(0); //1、指定行、列单元格赋值sheet.GetRow(1).GetCell(2).SetCellValue(companyInfo?.FFullName); //2、模......
  • 高精度
    #include<bits/stdc++.h>#defineN20005#defineM40005#definelllonglong#defineahz.w#definebkz.w#defineckzkz.w#definedkzzf.w#definehphz.p#definekpkz.p#definecpkzkz.p#definedpkzzf.p#defineP998244353#defineinv(x)ksm(x......
  • 三坐标测量机轮廓度测量操作指南:打造高精度测量解决方案
    在现代制造业中,精确度和质量控制是至关重要的因素。而对于产品的尺寸和形状的测量,三坐标测量机成为了一种重要工具。一、为什么选择三坐标测量机?三坐标测量机是一种能够精确测量物体三维尺寸和形状的设备。相较于传统的测量工具,三坐标测量机具有以下优势:高精度:三坐标测量机采用先......
  • Python多线程爬取数据代码模版
    由于对爬虫Ip信息的理解可能存在偏差,我将假设你想要爬取的网站支持Python多线程运行数据。以下是一个简单的Haskell爬虫程序,用于爬取Python多线程跑数据的内容:importNetwork.HTTPimportNetwork.URIimportData.ListimportData.MaybeimportControl.Monad--爬虫爬虫Ip信息......
  • 模版的导入
    使用方式:将页面的某一个局部当成模块的形式,哪个地方需要就可以直接导入使用即可导入方式如下:首先写好要导入的HTML页面 之后在需要导入处书写代码:{%include'被导入的页面.html'%} ......
  • 高精度减法(C语言实现)
    高精度减法(C语言实现)介绍众所周知,整数在C和C++中以int,long,longlong三种不同大小的数据存储,数据大小最大可达2^64,但是在实际使用中,我们仍不可避免的会遇到爆longlong的超大数运算,这个时候,就需要我们使用高精度算法,来实现巨大数的运算。高精度的本质是将数字以字符串的形式......