首页 > 其他 > 详细

PAT乙级1016

时间:2020-01-21 20:34:31      阅读:82      评论:0      收藏:0      [点我收藏+]

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

更改过程

PAT乙级1016

原文:https://www.cnblogs.com/another-7/p/12145037.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!