字符串加法

最近在刷PAT(Programming Ability Test). 发现许多题目都用到了字符串相加,今天就来总结一下。

1.stoi等

在c++ 11 中可以直接调用stoi,stol, stoll,stoull全局函数.分别将字符串转换为int,long int, long long int, unsigned long long int

 string  a  = "123";
 string b = "456";
 cout << stoi(a) + stoi(b)<<endl;

输出

579

其他函数的用法同上

2.自定义函数

先贴上核心代码

string string_add(string a,string b)
{
    string result;            //结果存放
    int sum = 0;                //每位相加和
    int remain = 0;            //余
    int carry = 0;            //进位
    for(int i = a.size()-1,j = b.size()-1; i >=0 || j>= 0; i--,j--)  
    {                                            //终止条件:同时扫描完a,b
         sum = ((i>=0?a[i]:'0') - '0') + ((j>=0?b[j]:'0')-'0') + carry;   //求和,如果已扫描完其中一个字符串,用0代替。
         remain = sum%10;                                    //计算余数
         carry = sum /10;                                    //计算进位
        result += to_string(remain);                            //附加结果
    }
    if(carry !=0)
        result += to_string(carry);                 
    reverse(result.begin(),result.end());                        //因为结果是逆序的,因此翻转
    return result;
}

实例测试: a = “19”,b=”1”

times i = 1,j = 0:
//    sum = '9' - '0' + '1' - '0' + 0;                     sum = 10
//    remain = 10 % 10;                                     remain = 0;
//    carry = 10/10;                         carry = 1;
//    result += to_string(0);
p result
    "0"
times 2 i = 0,j = -1:
//    sum = '1' - '0' + '0' - '0' + 1;                     sum = 2
//    remain = 2 % 10;                                     remain = 2;
//    carry = 2/10;                         carry = 0;
//    result += to_string(0);
p result
    "02"
if(carry == 0)                                       //false
reverse(result.begin(),result.end());
p result
"20"

很多题目都用到了字符串相加,例如:
1024. Palindromic Number (25)
1136. A Delayed Palindrome (20)
感兴趣的同学也可以刷刷看

感谢稀稀拉拉的赞赏