大意
给你一个字符串,一个个数字
要根据前个数字来判断第个数字是否合法
其中判断依据是 是否等于 (表示第个数)
分析
其实推导出来已经很容易了
但是还有一个坑
根据题目所知 可以为 就代表需要特判
#思路
特判
的方法又两种
- 将 为 的值修改为 ,同时将修正过后的值重新修改为
- 土办法专门对 进行处理
很明显第一种方法要好很多
但我用的第二种
代码
#include <bits/stdc++.h>
using namespace std;
string a;
long long ans = 0;
long long num = 1;
int main() {
cin >> a;
//逐个的变量字符串
for (int i = 0; i < a.size(); i++) {
if (a[i] >= '0' && a[i] <= '9') {
int t;
t = a[i] -'0';
ans += t * num;
num++;
}
//X时的特判情况
if (a[i] == ‘X') {
int t = 10;
ans += t * num;
num++;
}
if (num == 10)
break;
}
//检查是否合法
ans = (ans + 11) % 11;
// cout<<ans;
int t = a[a.size() - 1] - '0';
if (t == ans || (a[a.size() - 1] == 'X' && ans == 10))
cout << "Right";
else {
//还是特判
if (ans == 10) {
a[a.size() - 1] = 'X';
} else
a[a.size() - 1] = ans + '0';
cout << a;
}
return 0;
}