前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每日一题C++版(超长整数加法)

每日一题C++版(超长整数加法)

作者头像
小白学视觉
发布2019-10-24 01:46:52
9400
发布2019-10-24 01:46:52
举报

编程是很多偏计算机、人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用。因此小白决定开辟一个新的板块“每日一题”,通过每天一道编程题目来强化和锻炼自己的编程能力(最起码不会忘记编程)

特别说明:编程题来自“牛客网”和“领扣”以及热心小伙伴的题目。由于小白有时想锻炼某一类编程方法,所以提供的代码不一定是最优解,但是本文提供的编程代码均为通过测试代码。

超长整数加法

题目描述

请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回error

输入描述:

输入为一行,包含两个字符串,字符串的长度在[1,100]。

输出描述:

输出为一行。合法情况输出相加结果,非法情况输出error

示例

输入

123 123

abd 123

输出

246

Error

解析

本题关键的问题在于输入的字符串数字非常的长,用int和long类型都不可以将其完全表示出来。因此需要采用一些小技巧,首先判断输入的字符串中是否都为数字,之后对按位进行整数加法,同时需要记录是否有进位。

代码

#include <iostream>
#include <string>
using namespace std;
 
bool isNum(string str)
{
    for(int i = 0; i < str.size(); i++)
        if(str[i] <= '0' || str[i] >= '9')
            return false;
    return true;
}
 
void pinjie(string str1, string str2)
{
    int i1 = str1.size() - 1;
    int i2 = str2.size() - 1;
    string str = "";
    int c = 0;//进位位
    while(1)
    {
        int n;
        if(i1 >= 0 && i2 >= 0)
            n = str1[i1] + str2[i2] - '0' - '0' + c;
        else if(i1 >= 0 && i2 < 0)
            n = str1[i1] - '0' + c;
        else if(i2 >= 0 && i1 < 0)
            n = str2[i2] - '0' + c;
        else
            break;
        if(n > 10)
        {
            c = 1;
            n %= 10;
        }
        else
            c = 0;
        str = (char)(n + '0') + str;
        i1--;
        i2--;
    }
    if(c)str = "1" + str;
    cout << str << endl;
}
 
int main()
{
    string str1,str2;
    cin >> str1 >> str2;
    if(isNum(str1) && isNum(str2))
        pinjie(str1, str2);
    else
        cout << "error" << endl;
    return 0;
}

运行结果

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 小白学视觉 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 超长整数加法
    • 题目描述
      • 解析
        • 代码
          • 运行结果
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档