js代码片段【数制转换】【判断回文】

JavaScript中数制之间的相互转换

数制之间的相互转换(适用于以2~9为基数的情况)
可以利用栈将一个数字从一种数制转换成另一种

转换算法如下:
1.最高位为n%b,将此位压入栈;
2.使用n/b代替n;
3.重复步骤1和2,直到n=0且没有余数;
4.持续将栈内元素弹出,直到栈为空,以此将这些元素排列,得到转换后数字的字符串形式。

源码:

function mulBase(num,base){
    var s=new Stack();
    do{
        s.push(num%base);
        num=Math.floor(num/=base);
    }while(num>0);
    var converted="";
    while(s.length()>0){
        converted+=s.pop();
    }
    return converted;
}

判断回文

回文:一个单词、短语数字,从前往后和从后往前写都是一样的。

方法一、使用栈,将字符串中每个字符按照从左到右的顺序压入栈,当字符串中的字符都入栈后,栈内保存了一个翻转后的字符串,最后的字符在栈顶第一个字符在栈底。字符串完整压入栈后,通过持续弹出栈中的每个字母可以得到一个新的字符串,若与原来的顺序恰好相反,则相等。

源码

function isPalindrome(word){
    var s=new Stack();
    for(var i=0;i<word.length;i++){
        s.push(word[i]);
    }
    var rword="";
    while(s.length()>0){
        rword+=s.pop();
    }
    if(word==rword){
        return true;
    }else{
        return false;
    }

方法二、两头往中间扫描:定义头和尾,向中间扫描,如果扫描过程中,头和尾所指的字符始终完全一致则为回文串。

function isPalindrome(str){
        if(str.length<1){
            return false;
        }
        var front=0;
        var back=str.length-1;
        while(front<back){
            if(str[front]!==str[back]){
                return false;
            }else{
                front++;
                back--;
            }
        }
        console.log(true);
        return true;
    }
    var str="isasi";
    isPalindrome(str);

方法三、从中间向两头扫,查看对应字符是否相等。

function isPalindrome1(str){
        if(str.length<1){
            return false;
        }
        var m=((str.length>>1)-1)>=0 ? (str.length>>1)-1:0;
        var first=m;
        var second=str.length-1-m;
        while(first>=0){
            if(str[first]!==str[second]){
                return false;
            }
            first--;
            second++;
        }
        console.log(true);
        return true;
    }


    var str="isasi";
    //isPalindrome(str);
    isPalindrome1(str);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值