单词记忆法

单词记忆方法

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;
}
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务