【程序题】新版国际标准书号
国际标准书号号码由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;
}
欢迎有更好的方法推荐!我们一起交流