so I have a problem with the Credit exercise from pset1. I updated my code today after realizing that I didn't split up the digits of the product of the current digit in the card number and 2 and adding them to the checksum individually. Now, my checksum is absolutely going haywire and I don't know what the problem is/how to correct the problem?
The code I used:
//checks credit card numbers for their validity
//and for the "brand" of the card, for example Visa,etc via Luhn's algorithm.
#include <stdio.h>
#include <cs50.h>
int main(void)
{
//gets and prints card number
long card_num = get_long("Number: ");
//variable for number's length
int num_length = 0;
//duplicate of card num variable for checksum and length calculation purposes
long card_num_dup = card_num;
//while loop to determine the length of the number
while (true)
{
card_num_dup /= 10;
num_length++;
if (card_num_dup < 1)
{
break;
}
}
//end of while
//reinitialize duplicate variable
card_num_dup = card_num;
//checking the card's type/validity
if (num_length > 16 || num_length < 13)
{
//checks for invalid lengths
printf("INVALID\n");
}
else
{
//variable for the checksum
int checksum = 0;
//loop counter
int j = 0;
//variable for the current digit in the number
int current_digit = 0;
//for loop for looping through the number to calculate checksum
for (int i = 0; i < num_length; i++)
{
//get current digit and remove it from card num
current_digit = card_num % 10;
card_num /= 10;
//if to control the digits' processing via Luhn's algorithm
if (j % 2 != 0)
{
int multiply = current_digit * 2;
int multiply_length = 0;
//while loop to determine length of multiply variable
while (true)
{
multiply /= 10;
multiply_length++;
if (multiply < 1)
{
break;
}
}
//end of while loop
//for loop for looping through the multiply variable
for (int k = 0; k < multiply_length; k++)
{
int digit = multiply % 10;
multiply /= 10;
checksum += digit;
}
//end of for loop
}
else
{
checksum += current_digit;
}
//end of if
j++;
}
//end of for loop
printf("%i",checksum);
Thanks in advance for the help!
Kind Regards
PrimeBeat