Advertisement
Normantas

CS50 (2018) | pset1 Credit | Solution by Normantas.

Dec 26th, 2018
588
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.85 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <cs50.h>
  3. #include <math.h>
  4.  
  5. void outputCard(int sum, int digit[]);
  6. int sumCal(int digit[], int howLong);
  7. int devisionIntCal(long long credit);
  8.  
  9.  
  10. int main() //Main Code;
  11. {
  12.     long long credit = get_long_long("Credit: "); // Test Code: 378282246310005 // Declares Needed/To-be-Used Data;
  13.     int digit[16], sum = 0;
  14.  
  15.     int devisionInt = devisionIntCal(credit);
  16.     for(int i = 0; i < devisionInt; i++) //splits ints
  17.     {
  18.         long long division = pow(10, devisionInt - i - 1);
  19.         digit[i] = credit / division % 10;
  20.     }
  21.    sum = sumCal(digit, devisionInt );
  22.    outputCard(sum, digit);
  23.  
  24. }
  25.  
  26. void outputCard(int sum, int digit[])
  27. {
  28.     if(sum % 10 == 0){ //Checks Card;
  29.         if(digit[0] == 4){
  30.             printf("Visa \n");
  31.         }
  32.         if(digit[0] * 10 + digit[1] == 37 || digit[0] * 10 + digit[1] == 34){
  33.             printf("AMEX \n");
  34.         }
  35.         if(digit[0] * 10 + digit[1] == 51 || digit[0] * 10 + digit[1] == 52 || digit[0] * 10 + digit[1] == 53 || digit[0] * 10 + digit[1] == 54 || digit[0] * 10 + digit[1] == 55)
  36.         {
  37.             printf("MASTERCARD \n");
  38.         }
  39.         }
  40.     else
  41.     {
  42.         printf("Invalid! \n");
  43.     }
  44. }
  45.  
  46. int sumCal(int digit[], int howLong)  //Calculates sum
  47. {
  48.     int sum;
  49.        for(int i = 0; i < howLong + 1; i = i + 2)
  50.     {
  51.         sum = sum + digit[i];
  52.     }
  53.     for(int i = 1; i < howLong + 1; i = i + 2)
  54.     {
  55.         sum = sum + (digit[i] * 2) / 10 + (digit[i] * 2) % 10;
  56.     }
  57.     return sum;
  58. }
  59.  
  60. int devisionIntCal(long long credit) //checks how long is the card, cause Amex can be 15digit, Visa can Be 13 or 15digits long, or Mastercard 16;
  61. {
  62.     int i = 16, checker;
  63.     do
  64.     {
  65.         i--;
  66.         long long dev = pow(10, i);
  67.         checker = credit / dev % 10;
  68.     }
  69.     while(checker == 0);
  70.     i++;
  71.     return i;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement