首页 > 其他分享 >洛谷P1601 A+B Problem(高精)

洛谷P1601 A+B Problem(高精)

时间:2024-06-12 22:30:36浏览次数:22  
标签:bign int len num 高精 operator P1601 Problem include

#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
const int N = 1005;
struct bign
{
    int len,s[N];
    bign()  {  memset(s,0,sizeof(s));  len=1;  }
    bign(int num)  {  *this=num; }
    bign(char *num) { *this=num; }
    bign operator =(int num)
    {
        char c[N];
        sprintf(c,"%d",num);
        *this=c;
        return *this;
    }
    bign operator =(const char *num)
    {
        len=strlen(num);
        for (int i=0;i<len;i++) s[i]=num[len-1-i]-'0';
        return *this;
    }
    string str()
    {
        string res="";
        for (int i=0;i<len;i++) res=(char)(s[i]+'0')+res;
        return res;
    }
    void clean()
    {
        while (len>1&&!s[len-1]) len--;
    }
    bign operator +(const bign &b)
    {
        bign c;    
        c.len=0;
        for (int i=0,g=0;g||i<len||i<b.len;i++)
        {
            int x=g;
            if (i<len) x+=s[i];
            if (i<b.len) x+=b.s[i];
            c.s[c.len++]=x%10;
            g=x/10;
        }
        return c;
    }
    bign operator -(const bign &b)
    {
        bign c;
        c.len=0;
        int x;     
        for (int i=0,g=0;i<len;i++)
        {
            x=s[i]-g;
            if (i<b.len) x-=b.s[i];
            if (x>=0) g=0;
            else{          
                x+=10;
                g=1;
            };
            c.s[c.len++]=x;
        }
        c.clean();
        return c;
    }
    bign operator *(const bign &b)
    {
        bign c;
        c.len=len+b.len;
        for (int i=0;i<len;i++) for (int j=0;j<b.len;j++) c.s[i+j]+=s[i]*b.s[j];
        for (int i=0;i<c.len-1;i++) { c.s[i+1]+=c.s[i]/10; c.s[i]%=10; }
        c.clean();
        return c;  
    }
    bool operator <(const bign &b)
    {
        if (len!=b.len) return len<b.len;
        for (int i=len-1;i>=0;i--)
             if (s[i]!=b.s[i]) return s[i]<b.s[i];
        return false;
    }
    bign operator +=(const bign &b)
    {
        *this=*this+b;
        return *this;
    }
    bign operator -=(const bign &b)
    {
        *this=*this-b;
        return *this;
    }  
};
istream& operator >>(istream &in,bign &x)
{
  string s;
  in>>s;
  x=s.c_str();
  return in;
}
ostream& operator <<(ostream &out,bign &x)
{
    out<<x.str();
    return out;
}
int main(){
    bign a,b,c;
    ios::sync_with_stdio(false);
    cin>>a>>b;
    c=a+b;
    cout<<c<<endl;
    return 0;
}

标签:bign,int,len,num,高精,operator,P1601,Problem,include
From: https://blog.csdn.net/Dream_zqc/article/details/139638170

相关文章

  • 自动驾驶仿真测试实践:高精地图仿真
    引言  随着自动驾驶技术的快速发展,基于高精地图的自动驾驶功能已初步落地应用,并持续迭代升级。在研发测试阶段,多方面因素导致测试人员可能无法拿到控制器内部高精地图对应的OpenDRIVE文件①,使得仿真场景与控制器内部高精地图无法完全匹配,自动驾驶功能受限,得不到有效的测试验......
  • D. "a" String Problem
    原题链接一句话题解由于t必须要包含非a字符,所以假如t包含前k个非a字符,那么s所包含的非a字符数量一定是k的倍数实施遍历t能包含几个非a字符,然后再算有几种填充a的方法复杂度\(logn·n\)之所以有logn是因为遍历s包含的非a字符数量的因子code#include<bits/stdc++.h>using......
  • Codeforces Problem 1980B Choosing cubes(基本排序)
    timelimitpertest1secondmemorylimitpertest256megabytesinputstandardinputoutputstandardoutputDmitryhas n......
  • Git-SSL证书-验证问题-可能由加速器引起:SSL certificate problem: unable to get loca
    一、问题的出现    当我们在使用Git 将本地仓库的代码推送到远程仓库或者从远程仓库克隆到本地时可能遇到以下问题。fatal:unabletoaccess'https://github.com/User/XXX/':SSLcertificateproblem:unabletogetlocalissuercertificate    即......
  • AD620ARZ高精度仪表放大器中文资料PDF数据手册引脚图产品手册产品参数特性
    产品说明:AD620是一款低成本、高精度仪表放大器,仅需一个外部电阻即可设置1至10,000的增益。此外,AD620采用8引脚SOIC和DIP封装,比分立式设计更小,功耗更低(最大电源电流仅为1.3mA),非常适合电池供电的便携式(或远程)应用。AD620具有40ppm(最大非线性值)的高精度、50μV(最大值)的低失调......
  • 高精度加法的实现
             这是C++算法基础-基础算法专栏的第七篇文章,专栏详情请见此处。引入    在C++语言中,int的可存储数据范围是-2147483648~2147483647,longlong的可存储数据范围是-9223372036854775808~9223372036854775807,但是如果一些数据比longlong的可存储数据......
  • #A. C08.L01.高精度加法与减法.概述
    一、高精度运算什么是高精度运算?我们都知道,数据类型是有大小范围的。整型数据int能表示的数的范围为:-2147483648至2147483647(-2^31至2^31-1)长整型数据longlong能表示的数的范围为:-9223372036854775808~9223372036854775807(-2^63至2^63-1)。那么当所要求解的数的大小还要......
  • 高精度 减- 高精度
    #include<iostream>#include<vector>usingnamespacestd;intmain(){vector<int>a,b;stringm,n;cin>>m>>n;for(inti=m.size()-1;i>=0;i--){a.push_back(m[i]-'0');}for(inti=n.si......
  • 【C/C++项目】——高精度计算pi值
    项目概述导入在现代科学研究和技术开发中,高精度的数值计算是不可或缺的。特别是在物理、天文学、密码学等领域,精确的大数运算对于理论模型的验证和应用实现至关重要。我们要做的是利用该类,计算圆周率到数千甚至数万位的精度,展示其处理复杂数学问题的能力。具体问题描述......
  • 高精度地图制作-更新和维护
    高精度地图制作-更新和维护之前有写过一篇高精度地图制作的介绍,后面也思考了一些问题,其中比较困扰我的是高精度地图如何做到实时更新?高精度地图的维护成本?最近看了ZENRIN公司关于高精度地图的介绍PPT[1],得到了很大的启发,简单的做一个学习记录。附赠自动驾驶最全的学习资料......