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

时间:2019-05-12 00:17:20

标签: c++ extraction modulus digits

问题如下:

输入是数据集的“ 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位数字。

1 个答案:

答案 0 :(得分:1)

我认为这就是您所指的。您可以仅将数字除以10,这将移动小数点。因为您将数字定义为int(长整型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;
}