输入描述:

输入两个字符串

输出描述:

输出给求和后的结果

//本算法支持正正,负负和一正一负四种情况。
//负负时,去掉两个前导符,然后转化为加法;
//一正一负时,先比较操作数大小,然后做减法
#include <string>
#include <iostream>
using namespace std;
string add(string s1,string s2);
string sub(string s1,string s2);
int main()
{
    string s1;string s2;
    while(cin>>s1>>s2)
    {
 
        if(isdigit(s1[0])&&isdigit(s2[0]))
            cout<<add(s1,s2)<<endl;
        else if(!isdigit(s1[0])&&!isdigit(s2[0]))
        {
            s1=s1.substr(1);s2=s2.substr(1);
            cout<<'-'+add(s1,s2)<<endl;
        }
        else if(isdigit(s1[0])&&!isdigit(s2[0]))//一正一负时先去掉前导-,然后补齐再比较操作数的大小
        {
            s2=s2.substr(1);
            if(s1.size()>s2.size()) s2=string(s1.size()-s2.size(),'0')+s2;//去掉前导后补齐两个字符串
            else    s1=string(s2.size()-s1.size(),'0')+s1;//由于要判断s1,s2的大小,所以要先补齐再判断
            if(s1>s2)   cout<<sub(s1,s2)<<endl;//如123,-57,去掉前导-然后调用减法函数
            else    cout<<'-'+sub(s2,s1)<<endl;//如23,-157,去掉前导-,交换位置后调用减法函数再加上前导-
        }
        else
        {
            s1=s1.substr(1);
            if(s1.size()>s2.size()) s2=string(s1.size()-s2.size(),'0')+s2;
            else    s1=string(s2.size()-s1.size(),'0')+s1;//去掉前导后补齐两个字符串
            if(s1>s2)   cout<<'-'+sub(s1,s2)<<endl;//如-123,57
            else    cout<<sub(s2,s1)<<endl;//如-23,157
        }
    }

string add(string s1,string s2)//字符串加法
{
    string res="";
    if(s1.size()>s2.size()) s2=string(s1.size()-s2.size(),'0')+s2;
    else    s1=string(s2.size()-s1.size(),'0')+s1;//去掉前导后补齐两个字符串
    int carry=0;
    for(int i=s1.size()-1;i>=0;i--)
    {
        char temp=(s1[i]-'0'+s2[i]-'0'+carry)%10+'0';
        res=temp+res;
        carry=(s1[i]-'0'+s2[i]-'0'+carry)/10;
    }
    if(carry)   res='1'+res;
    return res;
}
 
string sub(string s1,string s2)//减法,主函数处理后保证结果是正数
{
    string res="";
    int borrow=0;int i=s1.size()-1;
    for(;i>=0;i--)
    {
        int op1=(s1[i]-borrow>=s2[i])?(s1[i]-borrow-'0'):(10+s1[i]-borrow-'0');
        int op2=s2[i]-'0';
        char temp=op1-op2+'0';
        res=temp+res;
        borrow=s1[i]-borrow<s2[i];
    }
    while(res[++i]=='0');//去掉前导0
    res=res.substr(i);
    return res;
}

无线OSS-高精度整数加法相关推荐

  1. 华为机试HJ57:高精度整数加法

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 输入两个用字符串表示的整数,求它们所表示的数之和. 字符串的长度不超过10000. ...

  2. 华为机试--高精度整数加法

    描述: 输入两个用字符串 str 表示的整数,求它们所表示的数之和. 数据范围: 1≤len(str)≤10000 输入描述: 输入两个字符串.保证字符串只含有'0'~'9'字符 输出描述: 输出求和 ...

  3. HJ57 高精度整数加法

    描述 输入两个用字符串 str 表示的整数,求它们所表示的数之和. 数据范围: 1 \le len(str) \le 10000 \1≤len(str)≤10000 输入描述: 输入两个字符串.保证字 ...

  4. (C++)高精度整数的存储、读入、比较和四则运算

    目录 1. 存储 2. 读入 3. 比较大小 4. 加法 5. 减法 6. 高精度整数和低精度整数的乘法 7. 高精度整数除以低精度整数 高精度整数,又称大整数,其含义就是用基本数据类型无法存储其精度 ...

  5. 信息学奥赛一本通 1168:大整数加法 | OpenJudge NOI 1.6 10:大整数加法

    [题目链接] ybt 1168:大整数加法 OpenJudge NOI 1.6 10:大整数加法 [题目考点] 1. 高精度 考察:高精加高精 高精度计算讲解 [解题思路] 注意:输入可能有多余的前导 ...

  6. [高精度整数] a+b [2010年华中科技大学计算机研究生机试真题]

    题目描述: 实现一个加法器,使其能够输出a+b的值. 输入描述: 输入包括两个数a和b,其中a和b的位数不超过1000位. 输出描述: 可能有多组测试数据,对于每组数据, 输出a+b的值. 样例输入: ...

  7. 大整数加法【信息学奥赛一本通-1168】

    1168:大整数加法 1168:大整数加法 [题目描述] 求两个不超过200位的非负整数的和. [输入] 有两行,每行是一个不超过200位的非负整数,可能有多余的前导0. [输出] 一行,即相加后的结 ...

  8. 大整数加法计算思路与算法实现

    参加MOOC PKU的程序设计专项课程学习,目前进度到C++.这门课太烂了,完全就是自学,作业还相当难!!!!比如这里week4的这题,其实是把poj上的大整数的加.减.乘.除合并到一题里面,这个代码 ...

  9. 第三章,课外作业(C++,数字高精度之加法)

    昨天无意中去了smartoj(一个OJ题的网站),第一题是输入两个数,然后输出和,觉得很简单,然后就开始做第二题,(题目地址)没想到是这一题是数字高精度的加法,以前学java是也没考虑过这种题目,于是 ...

  10. 【算法学习笔记】11:高精度整数A+B、A-B、A*b、A/b

    高精度算法是在计算问题涉及的数据范围超过该程序语言的表示能力时,用数组模拟数学运算的一类算法.本节学习高精度的整数四则运算,其中乘法只要求一个因子是高精度,除法只要求被除数是高精度.以下,用大写字母( ...

最新文章

  1. 模仿国外某小哥,做的一个字符串转动态linq表达式 及 部分扩展
  2. 总结网站调用Flash的几种方法【转】
  3. Latex:图片及子图排版
  4. 在做自动化测试之前你需要知道的,转自:http://www.cnblogs.com/fnng/p/3653793.html
  5. error:cannot load driver JL2CM3.dll
  6. 二维数组常用的赋值方式
  7. javascript学习系列(18):数组中的include方法
  8. 彻底卸载oracle
  9. bzoj 4447 小凸解密码
  10. HFSS(ANSYS Electronics)仿真2.45GHz矩形微带天线
  11. python 打开pdf显示在页面_C# WinForm打开PDF文件并在窗体中显示
  12. 2019第十四届中国竞争情报国际年会将于4月在上海召开
  13. Linux多线程pthread使用
  14. “三次握手,四次挥手”你真的懂吗? 1
  15. Acer 4750 安装黑苹果_黑苹果 MacOS 10.15 Catalina安装教程
  16. 手游传奇刷元宝_战神传奇手游刷元宝方法技巧大全
  17. 数据化运营17 留存:如何通过数据、社交、内容手段提升用户留存?
  18. GD32F4 USB DFU IAP
  19. OC 十进制 二进制 转换
  20. 2021上海高考小三门成绩查询,2021上海高考等级考分数怎么划分等级的

热门文章

  1. nodejs mysql 执行多条sql语句
  2. 【转】史上最简单的软件破解——5行脚本代码完美破解99%的过期软件
  3. 搭建Dubbo开发学习环境——补充新版本的Dubbo-Admin的编译和执行过程
  4. MySQL数据库无法启动的简单排错
  5. 怎样在 Ubuntu Unity Dash 添加关机、重启选项
  6. Git的commit your changes or stash them before you can merge
  7. 只会编程的程序员没有前途
  8. 让SQL2000的查询分析器能够直接编辑SQL2005的视图或存储过程
  9. 楼道声光控灯闪烁_照明灯闪烁其中一个原因就是它
  10. 将两个数组河滨_【探索】苏州河两岸将新增12公顷公园绿地,四季皆有景