Я работаю над кредитным заданием для PSET1 (CS50). Я могу получить общую сумму для правильной работы для примера номера: 4003600000000014 , но он не работает ни с одним из других номеров:
Я также не могу получить его, чтобы успешно идентифицировать компанию. Я попытался включить комментарии внутрь. Вот ссылка на задание . Лучше пояснить, чего я пытаюсь достичь с помощью sh.
#include <cs50.h>
#include <math.h>
#include <stdio.h>
int dubsum;
int singlesum;
int tot;
long secondspot;
int main(void)
{
long number = get_long("Number: ");
//finds every other spot starting at the back and doubling
for (int i = 1; i <= 17; i = i + 2)
{
// front is the string from the starting place of desired number; back truncates behind
long front = pow(10, i + 1);
long back = pow(10, i);
long backsecond = pow(10, i - 1);
long spot = round(((number % front) - (number % back)) / back);
//sanity check 1
// printf("for i: %i,\ndigit to be doubled: %li\n", i, spot);
//if we find a valid 2nd spot #, double it and add together its parts, then reset spot to 0
for (int dub = 2 * spot; spot != 0 && i < 16; spot = 0)
{
//for double digit numbers after doubling
if (dub >= 10)
{
int a = (dub % 100 - dub % 10) / 10;
int b = dub % 10;
dubsum = dubsum + a + b;
}
else
{
dubsum = dubsum + dub;
}
}
// calculating the other numbers
if (i == 1)
{
singlesum = number % back;
}
else
{
secondspot = round(((number % back) - (number % backsecond)) / backsecond);
singlesum = singlesum + secondspot;
}
//sanity check on counters
//printf("digit to be added: %li\nrunning tally for dub sum: %i\n running tally for singlesum: %i\n\n\n", secondspot, dubsum, singlesum);
}
tot = dubsum + singlesum;
printf("%i", tot);
//check on known numbers
if (tot == 20)
{
//AmEx check: 15 digit # starting with 34/37
if (round(number / pow(10, 13)) == 34 || round(number / pow(10, 13)) == 37)
{
printf("AmEx\n");
printf("%f", round(number / pow(10, 13)));
}
//MasterCard check: 16 digt # starting with 51-55, inclusive
if (round(number / pow(10, 14)) >= 51 && round(number / pow(10, 14)) <= 55)
{
printf("Mastercard\n");
}
//Visa Check: 13 || 16 digit # starting with 4
if (round(number / pow(10, 15)) == 4 || round(number / pow(10, 12)) == 4)
{
printf("Visa\n");
}
}
else
{
printf("INVALID\n");
}
}