试图重写代码以包含模数运算符

Trying to rewrite a code to include the modulus operator

问题如下:

输入的是"t"个数据集,后面是t个11位数字。代码中包含一个密码作为数组。该代码应该将输入数字中的后续数字乘以密码中的相应数字,从而产生 11 次乘法的总和。之后代码检查总和是否可以被 10 整除。如果是,则 returns "correct",如果不是 - "incorrect".

我编写了一个按预期工作的代码,但我想简化此代码,特别是包括模数运算符而不是 fmod 以从 11 位输入数字中提取数字。我试过使用模数,但它只能用于整数。

我找到了一个简单的倒序数字提取器的代码(使用 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 位数字。

我想这就是你所指的。您可以继续将数字除以 10,这将移动小数点。它不会变成浮点数,因为您将数字定义为 int(long long int),因此任何小数点都会被删除,您可以自由使用模数。

#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 = number%10;
            number = number/10;
            sum = sum + digit*cipher[j];
        }
        if (sum%10==0)
            cout << "Correct" << endl;
        else
            cout << "Incorrect" << endl;
   }
   return 0;
}