Description
验证书籍的ISBN码,给出一个10位ISBN码,前9位中每一位的值在0-9之间,最后一位的值在0-X之间(X为10)。从第一位开始,按照第一位的数字乘以10+第二位数字乘以9+···+第十位数字乘以1的形式求和,若其和能整除11,则为有效ISBN码.输入一串10位ISBN码,其中有一位是?。
输出该?位置上的数字,若不存在,输出-1
Input
一个10位ISBN码
Output
输出?位置上的数字,若不存在,输出-1
Sample Input
15688?111X
Sample Output
1
Solution
水题
Code
#include<iostream>
using namespace std;
int main()
{
char s[10];
while(cin>>s)
{
int i,flag,res=0;
for(i=0;i<10;i++)
{
if(s[i]>='0'&&s[i]<='9')//是数字则乘其权值累加
res+=(s[i]-'0')*(10-i);
else if(s[i]=='X')//是X则加10
res+=10;
else if(s[i]=='?')//是?则记录其权值
flag=10-i;
}
for(i=0;i<=10;i++)//枚举?处数字
if((res+flag*i)%11==0)
break;
if(i==10)
{
if(flag!=1)//不存在可行解
cout<<"-1"<<endl;
else//?是X
cout<<"X"<<endl;
}
else
cout<<i<<endl;
}
return 0;
}

本文介绍了一种简单的方法来验证10位ISBN码的有效性,并通过算法确定缺失位的有效数值。通过对输入的ISBN码进行解析,算法能够计算出未知数字的位置并找到使ISBN码有效的正确数字。
&spm=1001.2101.3001.5002&articleId=46813463&d=1&t=3&u=4aef51e428a94578a77c4f607c388c70)
738

被折叠的 条评论
为什么被折叠?



