PAT乙级1016

1016 部分A+B (15分)

我Typora都写好了,你不支持?

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

代码段

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

更改过程

相关文章
相关标签/搜索