只有80????跪求指教

P1055 [NOIP2008 普及组] ISBN 号码

关注??
by Dimly_dust @ 2020-02-19 16:00:16


代码已准备好
by Dimly_dust @ 2020-02-19 16:01:52


题目的思路很简单,先将9个数字求和,然后对11取余,如果余数等于10则识别码为‘X’ 否则为余数,在判断是不是等于所输入数字字符串中最后一个数的值; ``` #include<iostream> #include<bits/stdc++.h> #include<algorithm> using namespace std; int main() { char a[20],t; int sum=0,flag=1; for(int c=0;c<13;c++) { cin>>a[c]; }/*输入字符串*/ for(int i=0;i<strlen(a)-1;i++) { if(a[i]>='0'&&a[i]<='9') { sum+=flag*(a[i]-'0'); flag++; } }/*求和*/ t=sum%11+'0'; if(t==10+'0') t='X';/*确认识别码*/ /*判断是否相等*/ if(t==a[12] { cout<<"Right"; } else { for(int j=0;j<strlen(a)-1;j++) { cout<<a[j]; } cout<<t; } return 0; } ```
by Dimly_dust @ 2020-02-19 16:02:42


@[缥缈于尘](/user/316896) 我知道思路啊,我只是不知道我的怎么W了,orz
by zhazhawei @ 2020-02-19 16:09:03


@[zhazhawei](/user/295283) ```cpp #include<bits/stdc++.h> using namespace std; int main(){ string s; cin>>s; int k = 1;//相应乘得数 int sum = 0;//和 int l = s.length();//字符串长度 for(int i=0;i<l-1;i++){//对sum进行累加取模 if(s[i]=='-'){ continue; } else{ sum += k*(s[i]-'0'); sum = sum % 11; k++; } } sum = sum % 11;//取余 if(sum == s[l-1]-'0'||(s[l-1]=='X'&&sum==10)){//如果等于最后一位数字 cout<<"Right"<<endl; } else{ for(int i=0;i<l-1;i++)//前面的不变 cout<<s[i]; if(sum == 10)//否则看是否等于10 cout<<'X'<<endl; else cout<<sum<<endl; } return 0; } ``` 自己对照一下吧,具体问题就是最后一个字符如果是`X`就没法正确判断是不是`Right`
by zhangboju @ 2020-02-19 17:27:19


@[zhangboju](/user/231600) 感谢!!
by zhazhawei @ 2020-02-20 18:39:33


|