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

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

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

超长整数加法

题目描述

请设计一个算法能够完成两个用字符串存储的整数进行相加操作,对非法的输入则返回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;
}

运行结果

(0)

相关推荐

  • 【编测编学】零基础学python_05_数字(整数+浮点数)

    在编程中,经常使用数字来记录游戏得分.表示可视化数据.存储Web应用信息等.Python根据数字的用法以不同的方式处理它们.鉴于整数使用起来最简单,下面就先来看看 Python是如何管理它们的.1.  ...

  • Python变量的定义和使用

    Python编程学习圈 昨天 任何编程语言都需要处理数据,比如数字.字符串.字符等,我们可以直接使用数据,也可以将数据保存到变量中,方便以后使用. 变量(Variable)可以看成一个小箱子,专门用来 ...

  • 小白必学教程:Python变量的定义和使用

    所有的一种编程语言都需要处理数据,如数字.字符串.字符等等,我们可以直接使用数据,或者把它保存到一个变量中,以方便以后使用. 变数(Variable)可看作是一个专门用于在程序中"装入&qu ...

  • C# 基础知识系列- 9 字符串的更多用法(一)

    0. 前言 在前面的文章里简单介绍了一下字符串的相关内容,并没有涉及到更多的相关内容,这一篇将尝试讲解一下在实际开发工作中会遇到的字符串的很多操作. 1. 创建一个字符串 这部分介绍一下如何创建一个字 ...

  • list与String的相互转换(Java8)

    public void test() { //字符串转list<String> String str = "测试1,测试2,测试3,测试4"; //此处为了将字符串中的 ...

  • 【黑客数学·每日一题】暑假期间“每日一题”汇总版

    各位黑客伙伴们: 大家好!随着暑期的结束,我们迎来了崭新的学期,"每日一题"的发布时间也正式恢复为常规的每周一到周五的下午(一周五期). 有部分黑客伙伴们在暑假安排了各种各样精彩活 ...

  • 每日一题 C++版(走迷宫)

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

  • 每日一题 C++版(汽水瓶)

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

  • 每日一题 C++版(简单密码)

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

  • 每日一题 C++版(分类有效的IP地址和掩码)

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

  • 每日一题 C++版(坐标移动)

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

  • 每日一题C++版(组成最大的数)

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

  • 每日一题C++版(电话号码分身)

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

  • 每日一题C++版(区间合并)

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