1016 部分A+B (15分)
输入样例1
3862767 6 13530293 3
输出样例1
399
输入样例2
3862767 1 13530293 8
输出样例2
0
我的理解
这个思路也挺直观的,找出字符串中给定重复字符的个数,然后构造数字,相加即可。因为要找到字符串中重复的字符,所以使用string进行存储,在遍历字符串进行比较的时候,输入的字符与遍历的元素比较,使用==总是比较遍历元素的ASCII码值,因为遍历元素是数字字符吗?,通过调试,我就将输入的字符先转化为ASCII码,进行比较就行了。然后构造数字P_A 和 P_B ,也是使用字符转拼接的,然后将字符串转为long long 类型进行计算。刚好C++库中提供的有将字符串转化为long long 类型的函数,stoll()。但是要注意如果字符串为“”空字符串,则在进行long long转化的时候回抛出异常,所以当字符串长度为0时,将其赋值为“0”即可。
代码段
#include <iostream>
#include <string>
using namespace std;
int main() {
string s1, s2;
char A, B;
long long repeatA = 0;
long long repeatB = 0;
cin >> s1 >> A >> s2 >> B;
int m = toascii(A);
int n = toascii(B);
// 找到s1,s2各自重复的字符个数
for (int i = 0; i < s1.length(); i++) {
if (m == s1[i]) {
repeatA++;
}
}
for (int i = 0; i < s2.length(); i++) {
if (n == s2[i]) {
repeatB++;
}
}
// 构造这个数字字符串
string resultA, resultB;
for (int i = 0; i < (int)repeatA; i++) {
resultA += A;
}
for (int i = 0; i < (int)repeatB; i++) {
resultB += B;
}
if (resultA.length() == 0) {
resultA = "0";
}
if (resultB.length() == 0) {
resultB = "0";
}
// 字符串转long long
string::size_type sz = 0;
cout << stoll(resultA, &sz, 0) + stoll(resultB, &sz, 0) << endl;
return 0;
}