7-2 ISBN转换

图书都有唯一的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);


}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值