ACM算法训练【高精度】

简介: ACM算法训练【高精度】


1.高精度加法


题目


85ea7912063c456aafac32828553ec7e.png


直接用数组模拟相加的过程


代码


#include <bits/stdc++.h>
using namespace std;
vector<int> Badd(vector<int> &A,vector<int> &B)
{
    vector<int> C;
    int t=0;      //进位
    for(int i=0;i<A.size()||i<B.size();i++)
    {
        if(i<A.size()) t+=A[i];
        if(i<B.size()) t+=B[i];
        C.push_back(t%10);    //本位结果
        t/=10;    //进位
    }
     if(t>0) C.push_back(1);     //最后一位有进位的情况
    return C;
}
int main()
{
    string a,b;
    vector<int> A,B;
    cin>>a>>b;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
    auto C=Badd(A,B);
    for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
    return 0;
}


2.高精度减法


题目


fb4ecc998da54d2d9fdbaeaa96d2c77b.png


代码:


直接用数组模拟相减的过程


#include <bits/stdc++.h>
using namespace std;
vector<int> sub(vector<int> &A,vector<int> &B)
{
    vector<int> C;
    int t=0;   //进位
    for(int i=0;i<A.size();i++)
    {
        t=A[i]-t;
        if(i<B.size()) t-=B[i];
        C.push_back((t+10)%10);    //数学算式进位
        if(t<0) t=1;
        else t=0;
    }
    while(C.size()>1&&C.back()==0) C.pop_back();   //去除前导0
    return C;
}
int main()
{
    string a,b;
    vector<int> A,B,C;
    cin>>a>>b;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    for(int i=b.size()-1;i>=0;i--) B.push_back(b[i]-'0');
    int fa=0;    //标记符号
    if(a.size()>b.size())
        C=sub(A,B);
    else if (a.size()==b.size())
        if(a>=b) C=sub(A,B);
        else
        {
            C=sub(B,A);
            fa=1;
        }
    else
    {
        C=sub(B,A);
        fa=1;
    }
    if(fa) cout<<'-';    //输出负号
    for(int i=C.size()-1;i>=0;i--)  cout<<C[i];
    return 0;
}


3.高精度乘法


题目

e1aa87eddfed40ee98ffb811717f0748.png


代码


乘法的运算过程:

本位=(进位+相乘)%10

进位=(进位+相乘)/10


7ecd0e7a07a34b62a31e327d194f9b8c.png


#include <bits/stdc++.h>
using namespace std;
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+t;
        C.push_back(t%10);
        t /=10;
    }
    while(C.size()>1&&C.back()==0) C.pop_back();    //去除前导0
    return C;
}
int main()
{
    string a;
    int b;
    cin>>a>>b;
    vector<int> A;
    for(int i=a.size()-1;i>=0;i--)
        A.push_back(a[i]-'0');
    auto C=mul(A,b);
    for(int i=C.size()-1;i>=0;i--)
        printf("%d",C[i]);
    return 0;
}


4.高精度除法


题目

60270595af224c24956ae61b17ea08e5.png


代码


9edbcf71829f4a1ea4d16d007e047a20.png


#include <bits/stdc++.h>
using namespace std;
vector<int> Cdiv(vector<int> &A,int b,int &r)
{
    vector<int> C;
    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();    //去除前导0
    return C;
}
int main()
{
    string a;
    int b;
    cin>>a>>b;
    vector<int> A;
    for(int i=a.size()-1;i>=0;i--) A.push_back(a[i]-'0');
    int r=0;   //定义余数
    auto C=Cdiv(A,b,r);
    for(int i=C.size()-1;i>=0;i--) printf("%d",C[i]);
    cout<<endl<<r;
    return 0;
}
目录
相关文章
|
4月前
|
算法 Java Serverless
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-444 算法训练 求和问题
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-444 算法训练 求和问题
49 1
|
4月前
|
算法 Java C语言
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
第十四届蓝桥杯集训——练习解题阶段(无序阶段)-ALGO-439 算法训练 简单字符变换
51 1
|
2月前
knn增强数据训练
【7月更文挑战第27天】
27 10
|
2月前
|
数据采集 编解码 人工智能
破解ChatGPT惊人耗电!DeepMind新算法训练提效13倍,能耗暴降10倍
【7月更文挑战第19天】DeepMind的JEST算法革新AI训练,提升效率13倍,节能10倍。通过联合数据批次选择,预训练指导及多分辨率训练,优化资源利用,降低能耗。实验显示性能提升,达到SOTA水平,但实施需大量资源,依赖优质参考模型。[论文链接](https://arxiv.org/pdf/2406.17711)
52 10
|
2月前
knn增强数据训练
【7月更文挑战第28天】
19 2
|
1月前
|
算法 搜索推荐
支付宝商业化广告算法问题之基于pretrain—>finetune范式的知识迁移中,finetune阶段全参数训练与部分参数训练的效果如何比较
支付宝商业化广告算法问题之基于pretrain—>finetune范式的知识迁移中,finetune阶段全参数训练与部分参数训练的效果如何比较
|
2月前
|
人工智能 边缘计算 算法
破解ChatGPT惊人耗电!DeepMind新算法训练提效13倍,能耗暴降10倍
【7月更文挑战第20天】DeepMind unveils Switch Transformer, revolutionizing AI energy consumption. This novel algorithm boosts training efficiency by 13x and slashes energy use by 10x compared to ChatGPT, marking a significant leap towards eco-friendly AI.
35 2
|
1月前
|
存储 算法
【C算法】编程初学者入门训练140道(1~20)
【C算法】编程初学者入门训练140道(1~20)
|
2月前
|
机器学习/深度学习 人工智能 文字识别
一种基于YOLOv8改进的高精度红外小目标检测算法 (原创自研)
【7月更文挑战第2天】 💡💡💡创新点: 1)SPD-Conv特别是在处理低分辨率图像和小物体等更困难的任务时优势明显; 2)引入Wasserstein Distance Loss提升小目标检测能力; 3)YOLOv8中的Conv用cvpr2024中的DynamicConv代替;
263 4
|
3月前
|
机器学习/深度学习 算法
**反向传播算法**在多层神经网络训练中至关重要,它包括**前向传播**、**计算损失**、**反向传播误差**和**权重更新**。
【6月更文挑战第28天】**反向传播算法**在多层神经网络训练中至关重要,它包括**前向传播**、**计算损失**、**反向传播误差**和**权重更新**。数据从输入层流经隐藏层到输出层,计算预测值。接着,比较预测与真实值计算损失。然后,从输出层开始,利用链式法则反向计算误差和梯度,更新权重以减小损失。此过程迭代进行,直到损失收敛或达到训练次数,优化模型性能。反向传播实现了自动微分,使模型能适应训练数据并泛化到新数据。
52 2