Skip to content

Instantly share code, notes, and snippets.

@mitrnsplt
Created April 17, 2014 00:48
Show Gist options
  • Select an option

  • Save mitrnsplt/10945596 to your computer and use it in GitHub Desktop.

Select an option

Save mitrnsplt/10945596 to your computer and use it in GitHub Desktop.
A solution for cs50's credit card validation problem
/**
*
* credit.c
*
* Peter Downs
*
* A program for validating credit card numbers.
*
*/
#include <cs50.h>
#include <math.h>
#include <stdio.h>
int main(void)
{
// Declare and initialize a variable and ask for user input.
long long cardnumber = 0;
// Ask for credit card number
do
{printf("What is your card number? ");
cardnumber = GetLongLong();
}
while (cardnumber < 0);
// Determine whether it has a valid number of digits
int count = 0;
long long digits = cardnumber;
while (digits > 0)
{
digits = digits/10;
count++;
}
if ((count != 13) && (count != 15) && (count != 16))
{
printf("INVALID\n");
}
int number[count];
for (int i = 0; i < count; i++)
{
number[i] = cardnumber % 10;
cardnumber = cardnumber / 10;
}
int originalnumber[count];
for (int i = 1; i < count; i++)
{
originalnumber[i] = number[i];
}
for (int i = 1; i < count; i+=2)
{
number[i] = number[i] * 2;
}
int v = 0;
int temp;
if (count == 13)
{
for (int i = 0; i < count; i++)
{
temp = (number[i] % 10) + (number[i]/10 % 10);
v = v + temp;
}
if (originalnumber[12] == 4 && v % 10 == 0)
{
printf("VISA\n");
}
else
{
printf("INVALID\n");
}
}
if (count == 15)
{
for (int i = 0; i < count; i++)
{
temp = (number[i] % 10) + (number[i]/10 % 10);
v = v + temp;
}
if (originalnumber[14] == 3 && v % 10 == 0 && (originalnumber[13] == 4 || originalnumber[13] == 7))
{
printf("AMEX\n");
}
else
{
printf("INVALID\n");
}
}
if (count == 16)
{
for (int i = 0; i < count; i++)
{
temp = (number[i] % 10) + (number[i]/10 % 10);
v = v + temp;
}
if (originalnumber[15] == 4 && v % 10 == 0)
{
printf("VISA\n");
}
else if (originalnumber[15] == 5 && v % 10 == 0 && (originalnumber[14] == 1 || originalnumber[14] == 2 || originalnumber[14] == 3 || originalnumber[14] == 4 || originalnumber[14] == 5))
{
printf("MASTERCARD\n");
}
else
{
printf("INVALID\n");
}
}
return 0;
}
@meettheravi

Copy link
Copy Markdown

is there any way of implementation the logic without using arrays?

Yes check this
problem-1-solution without array

@meettheravi

Copy link
Copy Markdown

https://github.com/me50/DeHacker17/blob/cs50/problems/2020/x/credit/credit.c

trying to check how i can get you solution without using arrays but page not found.

You can check my solution
problem-1-solution without array

@tzmueller

Copy link
Copy Markdown

For those who are still beginners with arrays, they are cleverly introduced in the following week's lecture (CS50 Week 2):

https://www.youtube.com/watch?v=v7Ho89RMRIo&t=851

Above solutions will make much more sense after watching.

@yegorPomaskin

Copy link
Copy Markdown

Mate, if you could leave any comments for your code that would be nice.

after line 42 they are needed so bad.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment