Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 16.10.2020
Сообщений: 117

Valid Credit Number

24.01.2021, 13:24. Показов 465. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Условие - перевел гугл переводчиком.

Задано положительное целое число длиной до 16 цифр, вернуть истину, если это действительный номер кредитной карты, и ложь, если это не так.

Вот алгоритм:

Каждую вторую цифру удваивайте, просматривая справа налево, начиная со второй цифры (справа).

Другой способ подумать об этом: если число цифр четное, удваивайте каждую вторую цифру, начиная с первой; если количество цифр нечетное, удвойте каждую вторую цифру, начиная со второй:

Если полученное число больше 9, замените его суммой собственных цифр (это то же самое, что вычесть из него 9):

Мой код прошел проверки на простые небольшие числа, но я не знаю на что он не прошел проверку

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
int main(){
 
 
    int a, n, b=0;
    cin>>n;
    vector<int>arr;
    while (n > 0)
    {
        a = n % 10;
        b = b * 10 + a;
        n = n / 10;
    }
    int z = 0;
    while (b > 0)
    {
        z = b % 10;
        arr.push_back(z);
        b = b / 10;
    }
 
 
    int sum = 0;
    reverse(arr.begin(), arr.end());
    for (int i = 0; i < arr.size(); ++i) {
        if(i % 2 != 0){
            arr[i] = arr[i] + arr[i];
        }
        if(arr[i] > 10){
  sum = sum +arr[i] - 9;
        }else{
            sum = sum + arr[i];
        }
 
 
 
 
    }
   
  
    cout<<sum;
 
 
 
}
Добавлено через 8 минут
И забыл добавить, что Finally, take that sum and divide it by 10. If the remainder equals zero, the original credit card number is valid.
C++
1
2
3
4
5
  if(sum % 10 == 0){
            return true;
        }else{
            return false;
        }
Добавлено через 5 секунд
И забыл добавить, что Finally, take that sum and divide it by 10. If the remainder equals zero, the original credit card number is valid.
C++
1
2
3
4
5
  if(sum % 10 == 0){
            return true;
        }else{
            return false;
        }
Добавлено через 6 минут
Я понял, ошибка в том, что оно дает иногд тесты, которые нельзя разложить и поэтому в конце выходит 0.

Кто знает как это можно исправить?

Добавлено через 14 минут
UPD: Нет, ошибка в другом
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.01.2021, 13:24
Ответы с готовыми решениями:

Calculate total number of operations needed to convert a number from origin to sigle digit
To predict person's fate, numerologist takes time of a person's life in seconds,then adds all it's digits together. If that sum of digits...

Не останавливается цикл while (cin >> number) {.}. number - целочисленная переменная
Начал писать небольшую программу, которая должна выводить число, встречающееся наибольшее количество раз в последовательности, но почти...

regex match is string valid hex number
class String def hex_number? self.match? /$/ end end код проходит фиксированные тесты и еще 95 и проваливается на 101м,...

4
Злостный нарушитель
 Аватар для Verevkin
10355 / 5775 / 1275
Регистрация: 12.03.2015
Сообщений: 26,693
24.01.2021, 13:29
Вылож оригинал задания на английском. Нихрена не понятно, как принимать решение о валидности номера карты.
0
863 / 513 / 215
Регистрация: 19.01.2019
Сообщений: 1,216
24.01.2021, 15:08
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <string>
#include <algorithm>
#include <numeric>
 
int main()
{
    std::string ccn;
    std::cin >> ccn;
 
    std::transform(ccn.begin(), ccn.end(), ccn.begin(), [](auto v) { return v - '0'; });
 
    for (int i(ccn.size() - 2); i >= 0; i -= 2) {
        ccn[i] *= 2;
        if (ccn[i] > 9) ccn[i] -= 9;
    }
 
    int sum = std::accumulate(ccn.begin(), ccn.end(), 0);
 
    std::cout << std::boolalpha << !(sum % 10);
 
    return 0;
}
Чё на выходе-то должно быть? Тру/фэлс?
1
0 / 0 / 0
Регистрация: 16.10.2020
Сообщений: 117
24.01.2021, 16:10  [ТС]
Given a positive integer of up to 16 digits, return true if it is a valid credit card number, and false if it is not.

Here is the algorithm:

Double every other digit, scanning from right to left, starting from the second digit (from the right).

Another way to think about it is: if there are an even number of digits, double every other digit starting with the first; if there are an odd number of digits, double every other digit starting with the second:

1714 ==> [1*, 7, 1*, 4] ==> [2, 7, 2, 4]

12345 ==> [1, 2*, 3, 4*, 5] ==> [1, 4, 3, 8, 5]

891 ==> [8, 9*, 1] ==> [8, 18, 1]
If a resulting number is greater than 9, replace it with the sum of its own digits (which is the same as subtracting 9 from it):

[8, 18*, 1] ==> [8, (1+8), 1] ==> [8, 9, 1]

or:

[8, 18*, 1] ==> [8, (18-9), 1] ==> [8, 9, 1]
Sum all of the final digits:

[8, 9, 1] ==> 8 + 9 + 1 = 18
Finally, take that sum and divide it by 10. If the remainder equals zero, the original credit card number is valid.
0
Злостный нарушитель
 Аватар для Verevkin
10355 / 5775 / 1275
Регистрация: 12.03.2015
Сообщений: 26,693
24.01.2021, 16:36
Ахтунг! Не отлаживал, писал на заборе!
C++
1
2
3
4
5
6
7
8
9
10
bool validate(uint64_t x)
{
  unsigned sum = 0;
  for (int idx = 0; x; x /= 10, idx++)
  {
    unsigned d = (1 + (idx & 1)) * (x % 10);
    sum += (d < 10) ? d : d - 9;
  }  
  return !(sum % 10);
}
Примеров валидных номеров ты не дал, а придумывать мне их лениво.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.01.2021, 16:36
Помогаю со студенческими работами здесь

Int number = 2; Console.WriteLine(++number - number-- * ++number); Выводит -6; Как ?
Знающие, объясните, пожалуйста. Каким чудом тут получается -6 ? O_o int number = 2; Console.WriteLine(++number - number-- *...

Fatal error - Invalid parameter number: number of bound variables does not match number of tokens'
$pass = md5($_POST); $email = $_POST; $login = $_POST; $sex = $_POST; $avatar = $_POST; ...

Invalid parameter number: number of bound variables does not match number of tokens
запрос $conn = connect_to_db(); $stmt = $conn-&gt;prepare(&quot;INSERT INTO brandaccounts (UserID, BrandID, LoginEmail, LoginID,...

Invalid parameter number: number of bound variables does not match number of tokens
Не могу решить ошибку: Invalid parameter number: number of bound variables does not match number of tokens Указывает на : if...

Ошибка при попытке умножить number на money "EConvertError with message 55,00p. is not a valid floating point value"
Опытные программисты подскажите чайнику как это исправить?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Программный отбор элементов справочника Номенклатура по группе 1С
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор под наименованию группы (на. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
Программный отбор элементов справочника Сотрудники по перечислениям 1С
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит предопределенное значение перечислений. Процедура. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru