- C++ 实现
// ISBN: International Standard Book Number
// -*- coding: utf-8 -*-
// @ Date : 2020/5/20 13:14
// @ Author : RichardLau_Cx
// @ file : Richard.cpp
// @ IDE : Dex-C++
// @ Source : luogu
#include <iostream>
#include <string>
using namespace std;
int main() {
string ISBN;
cin >> ISBN;
int sum = 0; // 记录逐位相乘后再相加的结果
int id; // 存放对应识别码
int times = 0; // 存放要乘以的倍数
char temp;
int num;
for (int i=0; i < 11; i++) {
if (i == 1 || i == 5 || i == 11) {
continue;
}
times++;
// cout << sum << endl; // 之前忽略了直接拿来计算,是用的字符的ASCII码值
sum += times * ((int)ISBN[i] - 48); // 因为字符0的ASCII码是48,所以需要减去,就是这个字符的真实数值
// cout << sum <<"+=" << times << "*" << ISBN[i] << endl;
}
id = sum % 11;
// cout << "id: " << endl;
if (id == 10) {
temp = 'X';
} else {
temp = (char)(id+48); // 加48转化为数学相应的ASCII码值,再转化为字符
}
if (temp == ISBN[12])
{
cout << "Right" << endl;
} else {
ISBN[12] = temp;
cout << ISBN;
}
return 0;
}