输入一个中文字符计算表达式,得出结果(只能有加减数字必须是一百以内)

        var s = '八十七加三十二减四十三加二十四减十五减三十加三减二';
        function fn(str){
            let add = []
            let sub = []
            let num = []
            let len = str.length
            let tmp = 0
            while(tmp<len){
                tmp = str.indexOf('加',tmp)
                if(tmp === -1){
                    break;
                }
                add.push(tmp);
                tmp++
            }
            while(tmp<len){
                tmp = str.indexOf('减',tmp)
                if(tmp === -1){
                    break;
                }
                sub.push(tmp);
                tmp++
            }
            str = str.replace(/加/g,',')
            str = str.replace(/减/g,',')
            num = str.split(',')
            for(let i =0;i<num.length;i++){
                if(num[i].length == 1)
                {
                    switch(num[i]){
                        case '零':
                        num[i]=0;
                        break;
                        case '一':
                        num[i]=1;
                        break;
                        case '二':
                        num[i]=2;
                        break;
                        case '三':
                        num[i]=3;
                        break;
                        case '四':
                        num[i]=4;
                        break;
                        case '五':
                        num[i]=5;
                        break;
                        case '六':
                        num[i]=6;
                        break;
                        case '七':
                        num[i]=7;
                        break;
                        case '八':
                        num[i]=8;
                        break;
                        case '九':
                        num[i]=9;
                        break;
                        case '十':
                        num[i]=10;
                        break;
                    }
                }
                else if(num[i].length == 2)
                {
                    if(num[i][0]== '十'){
                        switch(num[i][1]){
                        case '一':
                        num[i]=11;
                        break;
                        case '二':
                        num[i]=12;
                        break;
                        case '三':
                        num[i]=13;
                        break;
                        case '四':
                        num[i]=14;
                        break;
                        case '五':
                        num[i]=15;
                        break;
                        case '六':
                        num[i]=16;
                        break;
                        case '七':
                        num[i]=17;
                        break;
                        case '八':
                        num[i]=18;
                        break;
                        case '九':
                        num[i]=19;
                        break;
                    }
                    }
                    else{
                        switch(num[i][0]){
                        case '二':
                        num[i]=20;
                        break;
                        case '三':
                        num[i]=30;
                        break;
                        case '四':
                        num[i]=40;
                        break;
                        case '五':
                        num[i]=50;
                        break;
                        case '六':
                        num[i]=60;
                        break;
                        case '七':
                        num[i]=70;
                        break;
                        case '八':
                        num[i]=80;
                        break;
                        case '九':
                        num[i]=90;
                        break;
                    }
                    }
                }
                else{
                    switch(num[i][0]){
                        case '二':
                        num[i] = num[i].replace('二','2');
                        break;
                        case '三':
                        num[i] = num[i].replace('三','3');
                        break;
                        case '四':
                        num[i] = num[i].replace('四','4');
                        break;
                        case '五':
                        num[i] = num[i].replace('五','5');
                        break;
                        case '六':
                        num[i] = num[i].replace('六','6');
                        break;
                        case '七':
                        num[i] = num[i].replace('七','7');
                        break;
                        case '八':
                        num[i] = num[i].replace('八','8');
                        break;
                        case '九':
                        num[i] = num[i].replace('九','9');
                        break;
                    }
                    switch(num[i][2]){
                        case '一':
                        num[i] = num[i][0] * 10 + 1
                        break;
                        case '二':
                        num[i] = num[i][0] * 10 + 2
                        break;
                        case '三':
                        num[i] = num[i][0] * 10 + 3
                        break;
                        case '四':
                        num[i] = num[i][0] * 10 + 4
                        break;
                        case '五':
                        num[i] = num[i][0] * 10 + 5
                        break;
                        case '六':
                        num[i] = num[i][0] * 10 + 6
                        break;
                        case '七':
                        num[i] = num[i][0] * 10 + 7
                        break;
                        case '八':
                        num[i] = num[i][0] * 10 + 8
                        break;
                        case '九':
                        num[i] = num[i][0] * 10 + 9
                        break;
                    }
                }
            }
            str = ''
            for(let j=0;j<num.length;j++)
            {
                str += num[j]
                if(add.length <= sub.length){
                    if(add[0]<sub[0])
                    {
                        str += '+'
                        add.shift()
                    }
                    else
                    {
                        str += '-'
                        sub.shift()
                    }
                }else{
                    if(add[0]>sub[0])
                    {
                        str += '-'
                        sub.shift()
                    }
                    else
                    {
                        str += '+'
                        add.shift()
                    }
                }
            }
            str = str.slice(0,str.length-1)
            return eval(str)
        }
        console.log(fn(s))
其他算法 文章被收录于专栏

其他算法

全部评论

相关推荐

07-09 18:33
门头沟学院 Java
这么逆天每年都有人去???&nbsp;填多益网申就是大型的服从性测试
鲁大牛:辅导员在群里发了这个公司我就申了一下。网申居然要写当场开摄像头写两篇不少于三百字的作文。太逆天了
点赞 评论 收藏
分享
机械打工仔:有说的你怀疑一下就行了,直接问也太实诚了
点赞 评论 收藏
分享
不亏是提前批,神仙打架,鼠鼠不配了
站队站对牛:现在92都报工艺岗了
投递韶音科技等公司7个岗位
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务