//不要被这句话迷惑了:Each of the first nine digits can take a value between 0 and 9!!!无关的一句话
//这题需要考虑的情况比较多,只要细心一点分清楚需要讨论的情况就OK!
#include<iostream>
#include<string>
#include<algorithm>
using namespace std;
int main()
{
string str;
cin >> str;
int i, j, pos, sum, ans;
bool flag;
pos = str.find('?');
//如果?在字符串的结尾情况,在这情况之下又有两种情况:因为其结尾可以为X,也可以为其他的数字
if (pos == 9){
sum = 0;
flag = false;
for (i = 0, j = 10; i < 9; i++, j--){
sum += (str[i]-48)*j;
}
for (ans = 0; ans < 10; ans++){
int tmp = sum;
tmp += ans;
if (tmp % 11 == 0){
flag = true;
break;
}
}
if (flag)
cout << ans << endl;
else{
sum += 10;
if (sum % 11 == 0)
cout << "X" << endl;
else
cout << -1 << endl;
}
}
// 如果?不在结尾的情况,也有两种情况讨论!
else{
if (str[9] == 'X'){
sum = 0;
flag = false;
for (i = 0, j = 10; i < 9; i++, j--){
if (str[i] == '?') continue;
else sum += (str[i]-48)*j;
}
sum += 10;
for (ans = 0; ans <= 9; ans++){
int tmp = sum;
tmp += ans * (10-pos);
if (tmp % 11 == 0){
flag = true;
break;
}
}
if (flag)
cout << ans << endl;
else
cout << "-1" << endl;
}
else{
sum = 0;
flag = false;
for (i = 0, j = 10; i < 10; i++, j--){
if (str[i] == '?') continue;
else sum += (str[i]-48)*j;
}
for (ans = 0; ans <= 9; ans++){
int tmp = sum;
tmp += ans * (10-pos);
if (tmp % 11 == 0){
flag = true;
break;
}
}
if (flag)
cout << ans << endl;
else
cout << "-1" << endl;
}
}
system("pause");
}
/*
020110331?
156881111?
?201103311
03?1103311
1
X
0
3
*/
poj 2190 ISBN
最新推荐文章于 2017-04-03 22:14:04 发布