修练者
试题描述
ISBN(国际标准图书编号)是由十个阿拉伯数字组成的编码,用来唯一地标识一本书。前九个阿拉伯数字描述这本书的一些信息,最后一个数字用来验证ISBN码是否正确。要验证ISBN码的正确性,你要把第一个数字乘以十,你要把第二个数字乘以九,你要把第三个数字乘以八……直到最后一个数字乘上一,再把这些积累加起来。如果所得的和可以被11整除的话,那么这就是一个合法的ISBN码。
比如说 0201103311 是一个合法的ISBN,因为
10*0+9*2+8*0+7*1+6*1+5*0+4*3+3*3+2*1+1*1=55
前九个数字都在0到9之间。有时候,最后一个数字需要取到10,那么我们就把最后一个数字写成大写X。比如156881111X也是一个合法的ISBN码。
你的任务就是在给你丢失了一个数字的ISBN码之后,确定那个丢失的数字。丢失数字的地方用?表示。
输入要求
一个十个数字组成的ISBN码,其中包含用?表示的一个丢失的数字。
输出要求
总共1行:就是那个丢失的数码(0..9或大写X)。如果标有的?的位置上没有数字可以使之成为一个合法的ISBN码的话,就输出-1。
输入样例
1568?1111X
输出样例
8
# include <iostream>
# include <cstdlib>
# include <cstdio>
# include <cstring>
# include <algorithm>
# include <cmath>
# include <iomanip>
# include <string>
using namespace std;
int main()
{
int k=0,f,h=10,s=0;
string a;
cin>>a;
for(int i=0;i<a.length();i++){
if(a[i]>='0'&&a[i]<='9') {
k+=(a[i]-'0')*h;
h--;
}
else if(a[i]=='X'){
k+=10;
}
else{
f=h;
h--;
}
}
for(int i=1;i<=9;i++){
if((k+i*f)%11==0){
cout<<i;
return 0;
}
}
cout<<"-1";
return 0;
}
做出来再次加码!