hello,大家好初来贴子的我是一位正刷题的小活几,请大家多多关照。今天讲一道模拟题。
模拟的诀窍就是他们说什么做什么。它的输入就是字符串,这就是类型。然后题目说要对里面的数逐位运算,可以使用循环,这里字符串的形式是x-xxx-xxxxx-x,最后一位是识别码,不包含运算,所以前几位我们循环时遇到"-"得进行continue(到下层循环),其余位则运用计数器进行运算处理,每循环一次就++,然后用一个数储存结果。循环外面我们可以写一个装了所有识别码的数与下标取模11的原数组比较就行了。
PS:代码请不要搬运,当搬运工很累滴!可以对照思路与注释理解O
#include <bits/stdc++.h>
using namespace std;
char a[14], mod[12] = "0123456789X";
//原数组与取模数组
int cnt = 1, sum = 0;
计数器与储存结果的数
int main()
{
ios::sync_with_stdio(false),cin.tie(0);
//可以让cin,cout与scanf,printf一样快
for (int i = 1; i <= 13; ++i)
cin >> a[i];
//输入原数组
for (int i = 1; i < 13; ++i)
{
if (a[i] == '-')
continue;
//遇到"-"就到下一次循环
else
{
sum += (a[i] - '0') * cnt;
++cnt;
}
//储存结果并准备下一次计算
}
if (a[13] == mod[sum % 11])
cout << "Right\n";
//识别码无误,就输出"Right"
else
{
a[13] = mod[sum % 11];
for (int i = 1; i <= 13; ++i)
cout << a[i];
}
//否则输出正确号码
return 0;
}