Проблема заключается в следующем:
Ввод - это "t" количество наборов данных, за которыми следуют t 11-значных чисел. В код включен шифр в виде массива. Код должен умножать последующие цифры от входного числа на соответствующие цифры из шифра, создавая таким образом сумму 11 умножений. После этого код проверяет, делится ли сумма на 10. Если это так, он возвращает «правильно», если нет - «неправильно».
Я написал код, который работает как задумано, но я хотел бы упростить этот код, в частности, включить оператор модуля вместо fmod для извлечения цифр из 11-значных входных чисел. Я пытался использовать модуль, но его можно использовать только для int.
Я нашел код для простого экстрактора цифр в обратном порядке (используя цикл while и% 10), но у меня возникли некоторые проблемы с его реализацией в моем коде ... Любая помощь будет признательна.
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
long long int number;
int cipher [11] = {1,3,7,9,1,3,7,9,1,3,1};
int t, digit, sum;
cin >> t;
for (int i=0; i<t; i++)
{
sum = 0;
cin >> number;
for (int j=10; j>=0; j--)
{
digit = fmod(number/(pow(10,(10-j))),10);
sum = sum + digit*cipher[j];
}
if (sum%10==0)
cout << "Correct" << endl;
else
cout << "Incorrect" << endl;
}
return 0;
}
Пример правильного числа: 44051401458. Мы предполагаем, что все входные числа всегда 11 цифр.