1016 部分A+B (15分)

 PAT乙级1016 算法

输入样例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”即可。

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

代码段

#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;
}

更改过程

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄