答案相同,为什么判错?

P1055 [NOIP2008 普及组] ISBN 号码

Simon_Lu @ 2021-11-05 18:35:38

#include<bits/stdc++.h>
using namespace std;
string s;
int ISBN;//识别码
int len;
void init(int n){
    for(int i=n;i<len;i++)
        s[i]=s[i+1];
    len--;
}
int main(){
    getline(cin,s);
    len=s.size();
    string tmp=s;
    int len2=tmp.size();
    for(int i=0;i<len;i++)
        if(s[i]=='-')
            init(i);
    for(int i=0;i<len-1;i++){
        ISBN+=(s[i]-'0')*(i+1);
        ISBN%=11;
    }
    if((ISBN<=9&&int(s[len-1]-'0')==ISBN)||(ISBN==10&&s[len-1]=='X'))
        cout<<"Right";
    else{
        for(int i=0;i<len2-1;i++)
            cout<<tmp[i];
        if(ISBN==10)
            cout<<"X";
        else
            cout<<ISBN;
    }
    return 0;
}

by _SeeleVollerei_ @ 2021-11-05 18:38:51

@Simon_Lu 试着在洛谷IDE运行一下


by MatrixGroup @ 2021-11-05 18:45:13

@Simon_Lu

s[i]=s[i+1];

不管别的,越界了。


by Simon_Lu @ 2021-11-05 19:40:00

@bilibilitdasc 收到


by wzsmallnb @ 2021-11-05 20:59:55

用char数组 s=cin.getline(s,sizeof(s));读入


|