问题如下:
输入是数据集的“ 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位数字。
答案 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;
}