杭电oj 1002题解答

A + B Problem II

这题看似简单,但是切记不能用 long long 来做。因为题目已知整数非常大,long long 的范围是根本不够的。所以,可以采取数组的方法去完成这题。

#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int A[1001], B[1001], Sum[1001];//用数组定义三个所需的变量
int main()
{
    int T;//测试用例的数量
    cin >> T;//输入这个数量
    for (int i = 1; i <= T; i++)
    {
        for (int i = 0; i <= 1000; i++)
        {
            A[i] = 0;
            B[i] = 0;
            Sum[i] = 0;
        }//将三个所需变量初始化
        string a, b;
        cin >> a >> b;
        for (int i = a.length() - 1; i >= 0; i--)
        {
            A[a.length() - 1 - i] = a[i] - '0';
        }//从最后一个字符开始,逐个向前遍历,取出每个字符并减去字符’0’的ASCII码,这样就得到了对应的数字形式,存入A数组
        for (int j = b.length() - 1; j >= 0; j--)
        {
            B[b.length() - 1 - j] = b[j] - '0';
        }//与上面一样
        int l = max(a.length(), b.length());//计算两个字符串长度的最大值,这是为了确保在拼接反转后的字符串时不会丢失信息
        //因为可能一个字符串比另一个短
        for (int i = 0; i <= l; i++)
        {
            int num = A[i] + B[i];//将这俩个数的每个位置的数相加得到这个位置的数
            if (num > 9)
            {
                num -= 10;
                B[i + 1]++;
            }//如果俩数相加要进一位,则在它前一位加一
            Sum[i] = num;
        }
        int s=0;
        for (int i = 1000; i >=0; i--)
        {
            if (Sum[i])
            {
                s = i;
                break;
            }
        }//这里得出Sum字符串的长度,以便后续输出这个和值
        cout << "Case " << i << ":" << endl;
        cout << a << " + " << b << " = ";
        for (int i = s; i >= 0; i--)
            cout << Sum[i];
        if (i == T)
            cout << endl;
    }
    return 0;
}

当然只是一种方法,如果你们还有更好的方法,请在评论区留下宝贵的方法和意见!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值