这题注意两点吧:
1.定义字符数组时,如果是字符串的情况要预留一个空间存‘\0’
2.不要忘记所有情况的讨论,这道题,我就是忘记判断为Right的情况还有一个X了
#include <iostream>
using namespace std;
int main()
{
char ISBN[13];
for (int i = 0; i < 13; i++)
cin >> ISBN[i];//这里可以直接采用字符串输入,但尽量少用
int s=0;
int j = 0;
for (int i = 0; i <11; i++)
if (ISBN[i]!= '-')
{
j++;//一定要记得定义一个j用来记录当前是第几个数字
int t = ISBN[i] - '0';
s += t* j;
}
int recognize = s % 11;
if (recognize == ISBN[12] - '0'||(recognize==10&&ISBN[12]=='X'))//这里要考虑当最后的判断码为X的情况,之前AC80分就是这里出问题了
cout << "Right" << endl;
else
{
if (recognize !=10)
{
ISBN[12] = char(recognize + '0');
for (int i = 0; i < 13; i++)
cout << ISBN[i];
}
else {
ISBN[12] = 'X';
for (int i = 0; i < 13; i++)
cout << ISBN[i];//分类讨论最后一个判断码为X的情况
}
}
return 0;
}