【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
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;
}

【C++程序题】新版国际标准书号_第1张图片

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

你可能感兴趣的:(算法,c++,数据结构)