B 模拟题
同源
https://ac.nowcoder.com/acm/contest/6871/A
#include<iostream>
#include<string>
using namespace std;
typedef long long ll;
int main() {
string s;
ll ans = 0, cnt = 0, res = 0;
ll sum = 0;
cin >> s;
int len = s.length();
// 主要思想 将字符串用括号来进行分割成一段一段
for(int i = 0; i < len;) {
if(s[i] == 'C' || s[i] == 'O' || s[i] == 'H') {
if(s[i] == 'C') cnt = 13;
if(s[i] == 'O') cnt = 17;
if(s[i] == 'H') cnt = 1;
i++;
res = 0;
while(i < len && s[i] >= '0' && s[i] <= '9')
res = res*10 + s[i++]-'0';
if(!res) ans += cnt; // 判断字母后面有没有数字
else ans += cnt*res; // 把目前求出来的数加到ans
}
else if(i < len && s[i] == '(') { // 前面的一段结束了,到新一段
sum += ans; // 将暂存数ans保存到总数sum
ans = 0; // 清零
i++;
}
else if(i < len && s[i] == ')') { // 表示括号这一段已经结束
i++;
res = 0;
while(i < len && s[i] >= '0' && s[i] <= '9')
res = res*10 + s[i++]-'0';
if(!res) sum += ans; // 判断括号后面有没有数字
else sum += ans*res;// 将暂存数ans保存到总数sum
ans = 0; // 清零
}
}
sum += ans; // 把最后一段加上, 如果最后是括号加上 0 不影响结果
cout << sum << endl;
return 0;
}
海康威视公司福利 1117人发布