Почему мой код неверный ?? Я не знаю почему ... Эта проблема состоит в том, чтобы получить номер карты от пользователя и сказать, является ли это действительным номером карты или недействительным номером карты. Это может быть американская карта Express, MasterCard или Visa. Американская Express карта имеет 15 цифр и должна начинаться с 34 или 36, в то время как MasterCard имеет 16 цифр и может начинаться с 51, 52, 53, 54, 55. Карта Visa должна иметь 13 или 16 цифр и должна начинаться с с 4. В этой задаче также используется алгоритм Луна, в котором для проверки правильности номера карты используются все остальные числа, начиная с десятки, умноженной на два, а затем, если добавить цифры, то не их произведение, а только цифры, поэтому, если вы умножите 8 на 2 его 16, поэтому вы должны добавить 1 + 6 и другие числа. Затем, как только вы получите сумму, вы должны добавить их к тем, которые вы не умножили на 2, и, наконец, если их сумма делится на 10, то она действительна. Я действительно не знаю, где я ошибся, я искал свой код почти 3 часа. Также нуб программист здесь ..
#include<stdio.h>
int main(void)
{
//declare and initialize card number
long long number = 0;
//ask user for their credit card number
do
{
printf("Number: ");
scanf("%lli", &number);
}
while (number < 0);
//declare and initialize a counter for the number of the digits
int counter = 0;
long long temp = number;
//loop to count the number of digits
while (temp > 0)
{
temp /= 10;
counter++;
}
//statement for invalid digits
if (counter != 13 && counter != 15 && counter != 16)
{
printf("Invalid number of digits\n");
}
//array to store the digits individually
int digits[counter];
// loop to store the digits in the array
for (int i = 0; i < counter; i++)
{
digits[i] = number % 10;
number /= 10;
}
//loop to multiply every other digit by 2
for (int j = 1; j < counter; j += 2)
{
digits[j] *= 2;
}
// loop to separate then add digits that are greater than 10
for (int x = 1; x < counter; x += 2)
{
if (digits[x] > 10)
{
int s = digits[x] % 10;
digits[x] /= 10;
digits[x] = (digits[x] % 10) + s;
}
}
int sum = 0;
//loop to get the sum of all numbers
for (int y = 0; y < counter; y++)
{
sum += digits[y];
}
sum %= 10;
switch (sum)
{
case '0':
if (counter == 15 && (digits[14] == 3 && (digits[13] == 4 || digits[13] == 7)))
{
printf("American Express\n");
}
else if (counter == 16 && digits[15] == 5)
{
printf("Master Card\n");
}
else if (counter == 13 && digits [12] == 4)
{
printf("Visa\n");
}
else if (counter == 16 && digits[15] == 4)
{
printf("Visa\n");
}
break;
default:
printf("Invalid\n");
break;
}
}