图书都有唯一的ISBN码(书号)标识,ISBN分为10位(ISBN-10)和13位(ISBN-13,以“978”开头)两种。
设ISBN-13为978-7-302-56474-4,从ISBN-13转换为ISBN-10的具体步骤如下:
(1)从ISBN-13中删除前缀978和校验码(最后一位),得到ISBN-10的前面部分:7-302-56474,然后去掉该部分的“-”得到一个9位数字730256474
(2)重新计算校验码。将上一步得到的9位数字依序分别乘以从10,9,8,……,3,2,将其乘积相加得到累加和sum,求余数r=sum%11;若r=0,则校验码为0;否则求11与r的差数d=11-r,若d=10,则以“X”来表示校验码,否则校验码为d。即:
sum=7×10+3×9+0×8+2×7+5×6+6×5+4×4+7×3+4×2=216,r=216 % 11=7,d=11-7=4,因此校验码为4。
最终得到ISBN-10:7-302-56474-4。
要求把书号从ISBN-13转换为ISBN-10。
输入格式:
输入一个字符串代表一个ISBN-13的书号,格式为“978-x-xxx-xxxxx-x”,其中x代表一个一位的数字。
输出格式:
输出一行,包含一个转换得到的ISBN-10的书号,格式为“x-xxx-xxxxx-x”,其中x代表一个一位的数字。
输入样例:
978-7-302-12260-9
输出样例:
7-302-12260-1
其实这题很简单就是一个点一直过不了
#include<stdio.h>
int main()
{
char s1[100];
char s2[100];
long a[100]={0};
scanf("%s",s1);
int j=0;
int k=0;
for(int i=4;i<16;i++)
{
s2[j]=s1[i];
if(isdigit(s2[j])!=0)
{
a[k]=s2[j]-'0';
k++;
}
j++;
}
s2[j]='\0';
int sum=0;
int count=10;
for(int i=0;i<k;i++)
{
sum=sum+a[i]*count;
count--;
}
int r;
char d;
r=sum%11;
if(r!=0)
{
d=11-r+'0';
if(d=='9'+1)
{
d='X';
}
}
else if(r==0)
{
d='0';
}
// printf("%d",sum);
printf("%s%c",s2,d);
}