20200216-客官这边请(A+B)

客官这边请

https://ac.nowcoder.com/acm/problem/14581

NC14581 客官这边请(A+B)

题目

我有一个很简单的题目,给你两个整数A和B,请把A和B的结果算出来。

输入描述

第一个行会输入一个整数T(1<=T<=20),代表有T组测试数据,接下来T行,每一行会输入两个整数A和B(0<A,B<10的100次方)。

输出描述

每一个测试数据,你要输出两行,第一行是Case #:#代表第T组测试数据,第二行要输出A + B = SumSumA+B的结果。
两组数据之间输出一个换行。

题解

注意到A和B的最大值有可能达到10的100次方,这远远超过了C/C++的长长整形能够表示的数据范围,而long double会损失精度,所以需要手动处理这些数据的加法(Python无视,因为其数据可以是任意大的),需要用字符串来接收输入的数据。

考虑到直接对字符串的处理比较困难(实际操作其实也还可以),可以自定义一个数据类型,用数组储存每位数字,并实现加法。

代码

Python

T = int(input())
for i in range(1, T + 1):
    a, b = map(int, input().split())
    print('Case %d:' % i)
    print(a, '+', b, '=', a + b)
    if i != T:
        print()

C++

#include<iostream>
#include<sstream>
#include<string>
using namespace std;
const short N = 105;

//储存大型数据的LongInt类
class LongInt {
private:
    short self[N];        //保存每一位的数字,共N=105位
public:
    //构造函数,用字符串init初始化数组self
    LongInt(const string& init) {
        short index;
        for (index = 0; index < N - init.length(); ++index)
            self[index] = 0;
        for (short i = 0; index < N; ++index, ++i)
            self[index] = init[i] - '0';
    }
    //将数组self中的数据组成字符串
    string get() const {
        ostringstream os;
        //辅助判断是否输出了第一个非零数字
        bool done = false;
        for (short i : self) {
            //前零不输出判断
            if (i != 0 || (i == 0 && done)) {
                os << i;
                if (i != 0) done = true;
            }
        }
        return os.str();
    }
    //将一个LongInt对象加到这个对象上
    void add(const LongInt& num) {
        for (short i = N-1; i >= 0; --i) {
            self[i] += num.self[i];
            if (self[i] > 9) {
                self[i - 1]++;
                self[i] %= 10;
            }
        }
    }
};


int main() {
    int T;
    cin >> T;
    for (int i = 1; i <= T; i++) {
        string as, bs;
        cin >> as >> bs;
        cout << "Case " << i << ':' << endl;
        cout << as << " + " << bs << " = ";
        //用两个字符串as、bs初始化a、b
        LongInt a(as), b(bs);
        a.add(b);
        cout << a.get() << endl;
        if (i != T)
            cout << endl;
    }
    return 0;
}
全部评论

相关推荐

来个大佬救一下,为上投了都是石沉大海了,没实习经历的话怕秋招直接进不了面。什么实习这么难找,基本
心态爆炸了:现在正式的岗位都少,实习基本不咋招的,除了大厂,中小企业其实没那么多岗位需求,就算是有,大多都是招一两个廉价劳动力,同时,他们也会希望你一来就能干活的,没时间培训你,就让你了解公司的项目,你了解完就可以开始干活。再者是,很多低质量的实习其实用处没有那么大的。我去年也是找实习找到破防,最后去了一家深圳的小公司实习,工作对我来说很简单,甚至不如我在学校做的项目,秋招的时候,这段实习经历也并没有帮上什么忙,投递简历,依旧非常低的回复率。低回复率是常态,尤其是找实习,找不到,那就把重心放在优化自己的简历和项目,多看八股文,锻炼自己的面试能力,多看别人的面经,自己模拟面试,等秋招的时候,只要有那么寥寥几次,好好抓住那几次机会。
点赞 评论 收藏
分享
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务