When I used a sorting algorithm, some numbers were still causing problems (like 7895122).
Code:
#include <iostream>
using namespace std;
int search(long array[], int size, long value);
void sort (long array[], int size);
int main()
{
long nums[] = {5658845, 8080152, 1005231,
4520125, 4562555, 6545231,
7895122, 5552012, 3852085,
8777541, 5050552, 7576651,
8451277, 7825877, 7881200,
1302850, 1250255, 4581002};
long number;
int results;
sort(nums, 18);
cout << "Enter a charge account number" << endl;
cin >> number;
while ((results = search(nums, 18, number)) == -1)
{
cin.clear();
cin.ignore(INT_MAX, '\n');
cout << "Invalid entry" << endl;
cout << "Re-enter" << endl;
cin >> number;
}
cout << "Your number is valid" << endl;
return 0;
}
int search(long array[], int size, long value)
{
int first = 0;
int middle;
int last = size - 1;
int position = -1;
int found = 0;
while (!found && first <= last)
{
middle = (first + last) / 2;
if (array[middle] == value)
{
found = 1;
position = middle;
}
else if (array[middle] > value)
last = middle - 1;
else
first = middle = 1;
}
return position;
}
void sort(long array[], int size)
{
long hold;
int finish;
do
{
finish = 0;
for (int i = 0; i < size - 1; i++)
{
if (array[i] > array[i + 1])
{
hold = array[i];
array[i] = array[i + 1];
array[i + 1] = hold;
finish = 1;
}
}
}while (finish != 0);
}