2017-01-05 5 views
1

Я беру курс CS50 на edx.org; это называется «Введение в компьютерную науку».Как отделить остаток от длинного длинного номера?

Я пытаюсь решить проблему с 1-й неделей. Поэтому пользователь вводит номер кредитной карты, и мне нужно разработать какой-то алгоритм, чтобы проверить, действительно ли его номер. Для этого мне нужно разделить целое 16-значное число на цифры. И я застрял здесь. Наверное, мне нужно сделать это в цикле, чтобы каждый раз набирать цифры по цифрам, и для этого я хотел разделить вход пользователя на каждый каждый шаг и как-то получить остаток.

Невозможно преобразовать в тип int из-за ограничений int на количество цифр, которое оно может удерживать. Как я могу реализовать эту функцию? Я попробовал это, но потом понял, что это ни к чему. На первый взгляд, по крайней мере. cre_num остается за кредитным номером.

long long check(long long cre_num) 
{ 
    double part, i; 

    for (i = 0.1; i <= 1; i = i+0.1) 
    { 
     if (cre_num/10 == i) 
     { 
      part = i; 
     } 
    } 
    return part; 
} 
+0

Понял! Большое вам спасибо, не думал об этом виде реализации. –

+1

Значение 'long long'' cre_num/10' никогда не будет равняться значению 'double' в диапазоне от 0,1 до 0,9. Он * может * приравнивать к '1.0', но' i' в цикле может даже не быть '1.0', потому что числа с плавающей запятой« сломаны », когда дело доходит до добавления неизбежно неточного кодирования« 0,1 », добавленного к себе 9 раз и ожидая, что он будет равен «1.0». Если номер карты был введен по цифре: держите его таким образом, если вы хотите изучить каждую цифру. –

+0

Вы должны включить тег cs50 –

ответ

3

Вам нужно поместить в вектор, или его вид, 16 цифр числа (длинный int)?

Когда% число на 10, вы получите последнюю цифру этого, как это:

13%10 = 3 
3%10 = 3 (03 = 3) 
523%10 = 3 

Так что, если вы% 10 вы получите последнюю цифру и положить в векторе, и чем вы/10, потому что/10 удалит последнюю цифру, та, которую вы уже сохранили.

Если вы хотите, я могу попытаться его закодировать, но я думаю, что вы уже сделали это.

+0

Это подразумевает, что я еще ничего не слышал о массивах и векторах. Но это хорошо, спасибо вам большое. Я уже предлагал танцевать вокруг ASCII, поэтому я думаю, что это ключ здесь. Не нужно кодировать, я просто искал идею. Еще раз спасибо, отлично провели день. –

+0

О, ладно. Если вы только хотели эту идею, проигнорируйте вторую часть, где я хотел «хранить» ваши данные.Отличный день =) –