Created
April 17, 2014 00:48
-
-
Save mitrnsplt/10945596 to your computer and use it in GitHub Desktop.
A solution for cs50's credit card validation problem
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /** | |
| * | |
| * 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; | |
| } |
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
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.
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
Yes check this
problem-1-solution without array