【Codewars】<5kyu> ISBN-10 Validation

一、题目:

ISBN-10 identifiers are ten digits long. The first nine characters are digits 0-9. The last digit can be 0-9 or X, to indicate a value of 10.
An ISBN-10 number is valid if the sum of the digits multiplied by their position modulo 11 equals zero.


这道题的目的是让我们去判断一串字符串是不是ISBN码,这道题目的核对标准如下(最新国际标准书号与此题不一致,可以点击查看):将一串字符串的前10位数依序分别乘以从1到10的数目,将其乘积相加,总和用11去除,若余数是0,则该数是ISBN
(注:前9个字符是数字0-9。最后一个数字可以是0-9或X,X表示值为10。)

例如:
ISBN     : 1 1 1 2 2 2 3 3 3  9
位置      : 1 2 3 4 5 6 7 8 9 10

这是一个有效的ISBN,因为:

(1*1 + 1*2 + 1*3 + 2*4 + 2*5 + 2*6 + 3*7 + 3*8 + 3*9 + 9*10) % 11 = 0

二、例子

1112223339   -->  true
111222333    -->  false
1112223339X  -->  false
1234554321   -->  true
1234512345   -->  false
048665088X   -->  true
X123456788   -->  false

三、题解一

// 方法一:通过for循环遍历求和实现
function validISBN10(isbn) {
    // TODO: return true if (and only if) isbn is a valid 10-digit ISBN.
    var sum = 0;
    if(isbn.length !== 10) return false;
    for(let i = 0;i<isbn.length;i++){
      if(i == 9 && isbn.substr(i,1) == 'X'){
        sum += 100;
      }else{
        sum += isbn.substr(i,1) * (i+1)
      }
    }
    if(sum % 11 == 0) return true;
    return false;
}

四、题解二

// 方法二:通过 split() 将字符串转换成数组,再使用 reduce() 方法累加求和
const validISBN10 = isbn => isbn.length == 10 && isbn.split("").reduce((a, b, i) => a + (((b == "X") && (i == 9)) ? 10 : b) * (i + 1), 0) % 11 == 0;
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值