The problem
An ISBN-10 (International Standard Book Number) consists of 10 digits: d1d2d3d4d5d6d7d8d9d10. The last digit, d10, is a checksum, which is calculated from the other nine digits using the following formula: (d1 *1+d2 *2+d3 *3+d4 *4+d5 *5+ d6 *6+d7 *7+d8 *8+d9 *9)%11
If the checksum is 10, the last digit is denoted as X according to the ISBN-10 convention. Write a program that prompts the user to enter the first 9 digits and displays the 10-digit ISBN (including leading zeros). Your program should read the input as an integer. Here are sample output:
Breaking it down
Reading input from the user and splitting a string on chars we will have the ISBN number to perform our calculation. Since we need to multiply the index of the array by the position, using IntStream.range is a way to handle it in java 8. Next calling mapToInt will transforms the string of streams to an IntStream
. Finally calling sum
, a java 8 reduction operation will sum the first 9 values together. Using total and performing a mod (modular) will find the 10th element or checkSum
. Finally combining it together to output the final format for the ISBN. Don't forget not validating the input could cause an Exception
.