求助,80分不知道哪里有问题

P1055 [NOIP2008 普及组] ISBN 号码

## 代码: ``` #include <bits/stdc++.h> using namespace std; int main(){ char a,b,c,d,e,f,g,h,i,j; int x; scanf("%c-%c%c%c-%c%c%c%c%c-%c",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j); x=((int(a)-48)*1+(int(b)-48)*2+(int(c)-48)*3+(int(d)-48)*4+(int(e)-48)*5+(int(f)-48)*6+(int(g)-48)*7+(int(h)-48)*8+(int(i)-48)*9)%11; if((x==10)&&(j=='X')) { printf("Right"); return 0; } if((x==10)&&(j!='X')) { printf("%c-%c%c%c-%c%c%c%c%c-%c",a,b,c,d,e,f,g,h,i,'X'); return 0; } if(x==int(j)-48) { printf("Right"); return 0; } else { printf("%c-%c%c%c-%c%c%c%c%c-%d",a,b,c,d,e,f,g,h,i,x); return 0; } return 0; } ```
by 2012GFKKKZ @ 2023-07-19 08:12:11


你的代码错在这里 ```cpp else if(c%11==10&&s[s.length()]!='X') ``` 最后一位应该是s.length()-1,也就是说应该改成这样 ```cpp if(c%11!=s[s.length()-1]-'0'&&c%11!=10) ``` 把s.length()改成s.length()-1 完整代码: ```cpp #include<bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; int a[20],j=0,c=0; for(int i=0;i<s.size()-2;i++){ if(s[i]-'0'>=0&&s[i]-'0'<=9){ a[j]=s[i]-'0'; j++; } } for(int i=0;i<j;i++) c+=a[i]*(i+1); if(c%11!=s[s.length()-1]-'0'&&c%11!=10) s[s.length()-1]=c%11+'0'; else if(c%11==10&&s[s.length() - 1]!='X') s[s.length()-1]='X'; else{cout<<"Right";return 0;} cout << s << endl; return 0; } ```
by bookchong @ 2023-07-19 08:25:46


@[Yemengying](/user/1028452)
by bookchong @ 2023-07-19 08:26:18


sorry,那一行错的代码应该改成这样 ```cpp else if(c%11==10&&s[s.length() - 1]!='X') ```
by bookchong @ 2023-07-19 08:27:39


好好好, 谢谢
by Yemengying @ 2023-07-19 11:01:11


|