最近在刷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)
感兴趣的同学也可以刷刷看