题解:#69.ISBN 号码 审核通过

lyhmbr CSP-J2二等 2024-06-02 17:03:14 2024-07-19 16:59:43 21

大意

给你一个字符串,一个个数字

要根据前个数字来判断第个数字是否合法

其中判断依据是 是否等于 (表示第个数)

分析

其实推导出来已经很容易了

但是还有一个坑

根据题目所知 可以为 就代表需要特判

#思路

特判的方法又两种

  • 的值修改为 ,同时将修正过后的值重新修改为
  • 土办法专门对 进行处理

很明显第一种方法要好很多

但我用的第二种

代码

#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;
}
{{ vote && vote.total.up }}