Я пытаюсь написать программу, в которой пользователь вводит ISBN, а затем проверяет запись для точности. ISBN - 0201702894
. Контрольная цифра (4) рассчитывается из остальных 9 цифр следующим образом: (сумма каждого (цифра умножается на ее позицию)) mod 11. Ex: (0*1 + 2*2 + 0*3 + 1*4 + 7*5 + 0*6 + 2*7 + 8*8 + 9*9)%11 = (0+4+0+4+35+0+14+64+81)%11 = 4 (202/11 = 18 remainder 4)
Контрольная цифра может определять, когда ISBN введен или скопирован неправильно.Simple C++ Array Logic Issue
Каждый раз, когда я ввожу значения, у меня всегда есть вывод «ISBN is not correct». Что-то не так с моей логикой.
1. Correct Value: 0201702894
2. Incorrect value: 0201702984
Код:
#include <iostream>
using namespace std;
int totalNumbersCheck=0;
int main()
{
int isbnArray[10]; //array to store the ISBN numbers
int ISBN=0; //inputted ISBN number
//user input
cout<<"Please enter the ISBN number: ";
cin>>ISBN;
//ISBN storage
isbnArray[ISBN];
//ISBN calculation
for(int i=0;i<10;i++)
{
totalNumbersCheck=isbnArray[i]*(i+1);
}
//remove last element from array
totalNumbersCheck-=isbnArray[10];
//check if remainder equals last element and output correct response
if(totalNumbersCheck%11==isbnArray[10])
{
cout<<"\nThe ISBN is correct.";
}
else
cout<<"\nThe ISBN is not correct.";
cin.get();
cin.get();
return 0;
}
Теперь я отредактировал массив, чтобы использовать 10 элементов, потому что я начинаю с 0, и я исправил цикл for. Еще раз проверьте, пожалуйста. – Klinetel
@KlineTel вам нужен массив длиной 11, чтобы вы могли хранить 11 цифр номера ISBN. 10 недостаточно – taocp
Вы имели в виду totalNumbersCheck + = isbnArray [i] * (i + 1); вместо totalNumbersCheck = isbnArray [i] * (i + 1); ? –