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

更改過程

相關文章
相關標籤/搜索