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;
}
更改程序
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/103941.html
標籤:其他
下一篇:bzoj2194 快速傅立葉之二
