单词记忆法
单词记忆方法
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; }