单词记忆法
单词记忆方法
https://ac.nowcoder.com/acm/contest/7412/C
链接:https://ac.nowcoder.com/acm/contest/7412/C
来源:牛客网
#include<iostream>
#include<string>
#include<math.h>
#include<map>
#include<algorithm>
#include<stdio.h>
#include<cstring>//TAIMIAOLE!!!!!!
#include<vector>
typedef long long ll;
using namespace std;
string s;
int i=0; //全局变量i 遍历一遍string s即可出答案
ll dfs(){
//ans和sum不能设置为全局变量 因为当进行递归时,递归的返回值ans相当于主程序的sum
ll ans=0,sum=0;
for(;i<s.length();++i){
ll tmp=0;
//对每一个字母或者一个括号括号内的sum 都要查找他后面的数字是多少
while(isdigit(s[i])&&i<s.length()){
tmp=tmp*10+s[i]-48;
i++;
}
//如果后面没有数字ans=ans+sum*1;
ans=ans+sum*(tmp?tmp:1);
//每次处理一个循环之后都要将sum变量置为0
sum=0;
//判断字母并获取它的数值
if(isalpha(s[i])){
sum=s[i]-'A'+1;
}
else if(s[i]=='('){
i++;//记得i++ 使递归中i的 起始值为i+1
sum=dfs();//将一个括号内所有值的和赋给变量sum
}
else break;//退出递归
}
//最后一个sum并不能在for循环中被ans加上所以这里要加上
ans+=sum;
return ans;
}
int main() {
cin>>s;
cout<<dfs();
return 0;
}