问题如下:
输入是" 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位数字。
我认为这是您所指的。您可以将数字除以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;
}