hduoj100

本文介绍了一种使用C++实现的字符串大数相加算法,该算法首先判断两个输入字符串是否为空,然后确定较长的字符串作为基准进行位运算。通过遍历字符串,将较短字符串的数字加到较长字符串对应位置上,处理进位,并在必要时添加最高位的进位。此算法适用于处理超过常规整型变量范围的大数相加操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

#include<iostream>
#include<string>
using namespace std;

string sum(string &s1, string &s2) {
        if (s1 == ""&&s2 == "")
            return "0"; 
        if (s1 == "")
            return s2;
        if (s2 == "")
            return s1;
        string max, min;
        if (s1.length() > s2.length()) {
            max = s1;
            min = s2;
        }
        else {
            max = s2;
            min = s1;
        }
        int i, j;
        int maxlen = max.length();
        int minlen = min.length();
        for(i = maxlen - 1, j = minlen - 1; j >= 0; j--, i--) {
            max[i] = max[i] + min[j] - '0'; //min[j]-'0'相当于对max数字进行移动
        }
        for (i = maxlen - 1; i > 0; i--) {
            if (max[i] > '9') {
                max[i] -= 10;
                max[i - 1] += 1;
            }
        }
        if (max[0] > '9') {
            max[0] = max[0] - 10;
            max = '1' + max;   //相当于拼接,前加就前接,后接就后加
        }
        return max;
 }

int main() {
    int num, i = 1;
    cin >> num;
    int ss = num;
    while (num--) {
        string num1,num2;
        cin >> num1 >> num2;
        cout << "Case " << i<< ":" << endl;
        cout << num1 <<" + "<< num2 << " = " << sum(num1, num2) << endl;
        if( i<ss )
            cout << endl;
        i++;
    }
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值