[每日一题]131:大数的加法运算与大小判断(小米OJ)


题目描述

对于给定的算术表达式,按规则输出计算结果,仅包含加法和大小判断。

输入:

一行字符串,为加号、大于、小于( + < > ) 连接的两个不限大小的非负整数。

输出:

当符号为 + 时, 计算两个数相加的和, 并以字符串格式返回; 当符号为 < 时, 如果左数小于右数, 返回大写字母字符 Y, 否则返回大写字母字符 N; 当符号为 > 时, 如果左数大于右数, 返回大写字母字符 Y, 否则返回大写字母字符 N。

如下样例:

输入:

972919822976663297>74058
875098336507333719633571722631534917759993913379786689>53558270653237768027942884431075534537929401567824882097903948774409200
7625022925148127196027859399571498914361+790786706794530

输出:
Y
N
7625022925148127196027860190358205708891

题解思路

代码如下:

#include <bits/stdc++.h>

using namespace std;

int main() {
    string s;
    while (cin >> s) {
        string s1, s2;

        int cur = 0;
        for (int i = 0; i < s.length(); ++i) {
            if (s[i] >= '0' && s[i] <= '9') {
                continue;
            }
            else {
                cur = i;
                break;
            }
        }

        s1 = s.substr(0, cur);
        s2 = s.substr(cur + 1);

        int len1 = s1.length();
        int len2 = s2.length();

        string res;
        int add = 0;
        switch (s[cur]) {
        case '+':
            while (len1 > 0 || len2 > 0) {
                if (len1 > 0) {
                    add += s1[len1-1] - '0';
                }
                if (len2 > 0) {
                    add += s2[len2-1] - '0';
                }

                res += add % 10 + '0';  // 当前位最大值不能大于0
                add /= 10;      // 如果大于10,进1
                --len1, --len2;
            }
            //相加完之后,如果还有进位,则再加1
            if (add == 1) {
                res += '1';
            }

            reverse(res.begin(), res.end());
            cout << res << endl;
            break;
        case '<':
            while (len1 < len2) {
                s1.insert(0, "0");
                ++len1;
            }
            while (len2 < len1) {
                s2.insert(0, "0");
                ++len2;
            }
            if (s1 < s2) {
                cout << 'Y' << endl;
            }
            else {
                cout << 'N' << endl;
            }
            break;
        case '>':
            while (len1 < len2) {
                s1.insert(0, "0");
                ++len1;
            }
            while (len2 < len1) {
                s2.insert(0, "0");
                ++len2;
            }
            if (s1 > s2) {
                cout << 'Y' << endl;
            }
            else {
                cout << 'N' << endl;
            }
            break;
        default:
            break;
        }
    }

    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值