【C++程序题】新版国际标准书号

【程序题】新版国际标准书号

国际标准书号号码由13位数字组成,并以五个连接号或四个空格加以分割,每组数字都有固定的含义。ISBN 978-7-302-38141-9787302381419校验码的计算方法如下:第1位数字乘以1加上第2位数字乘以3,再第3位数字乘以1,再加上第4位数字乘以3...…以此类推,用所得的结果od 10,再用10减去所得的余数即为校验码,如果校验码为10,则校验码为0。例如ISBN号码978-7-302-38141-9,它的校验码的计算方法是(1)9*1+7*3+8*1+7*3+3*1+0*3+2*1+3*3+8*1+1*3+4*1+1*3=91(2) 91%10=1(3) 10-1=9所以校验码为:9。编写程序判断输入的ISBN号码中识别码是否正确,如果正确,则仅输出“Right”;如果错误,则输出是正确的ISBN码。

我的思路:
我是先定义一个字符型数组b[]保存所有输入的字符,再通过另一个整型数组a[]用来保存其中是数字的字符(要强制转化),
最后对其分奇偶分别*3或*1,按题目要求加总,取模,相减,与校验码进行比较输出结果。

代码如下:

#include<iostream>
using namespace std;
int main()
{
    char b[17];
    int i,sum=0;
    int j=0;
    int a[13];
    int c[13];
    for (i = 0; i < 17; i++)
    {
        cin >> b[i];
            if (b[i] != '-')
            {
                a[j] = (int)( b[i]-'0');//注意:这里强制转化如果不减‘0’的话,得到的a[]只是b[]的ASCII.
                j++;            
             }
    }
    for (i = 0; i < 12; i++)
    {
    
         if (i % 2 == 0)
            c[i] =a[i] * 1;
        else c[i] =a[i] * 3;
        sum = sum + c[i];
    }
    sum = 10 - (sum % 10);
    if (sum == 10) sum = 0;
    if (sum ==a[12])
        cout << "Right";
    else
    cout << a[0] << a[1] << a[2] << "-" << a[3] << "-" << a[4] << a[5] << "-" << a[6] << a[7] << a[8] << a[9] << a[10] << a[11] << "-" << sum;
    
    return 0;
}

欢迎有更好的方法推荐!我们一起交流

  • 8
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值