不用算这个号码的长度,因为题目已经说出**保证输入符合ISBN号码的格式要求**了,所以s.size不需要。
------------
循环开始就不太对了,第一个分支包括了最后一个数,我的思路是从开头开始算,算到倒数第二个数字,然后用这些乘积的和模11,如果与最后一个数字相同输出Right,不然就将最后一个数字改为模后的余数。所以循环只要到倒数第二个数字(位于第十一位)就行了。
代码:
```c
#include<iostream>
#include<cstring>
using namespace std;
string s;
int i,c=1,all;
long long sum=0;
int main()
{
getline(cin,s);
for(i=0;i<=10;i++)
if(s[i]!='-')
sum+=(s[i]-48)*c++;
all=sum%11;
if(all==s[12]-48 ||
(all%11==10 && s[12]=='X'))
printf("Right");
else
{
for(i=0;i<=11;i++)
printf("%c",s[i]);
if(all!=10)
printf("%d",all);
else
printf("X");
}
}
```
by sxjsxj @ 2023-06-26 17:25:04