问题标题: 酷町堂:1458 ISBN号码

0
0
已解决
姜宇轩
姜宇轩
中级天翼
中级天翼

题目链接: 酷町堂:1458

WA 0 代码:

知识点:字符串模拟

#include<bits/stdc++.h>
using namespace std;
string s;
int sum,cnt=1;
int main(){
    cin>>s;
    char zf=s[s.size()-1];
    int t=int(zf)-48;
    for(int i=0;i<s.size();i++){
        if(s[i]=='-') continue;
        sum+=(int(s[i])-48)*cnt;
        ++cnt;
    }
    cnt=1;
    if(sum%11==t) cout<<"Right";
    else{
        for(int i=0;i<s.size()-1;i++){
            if(s[i]=='-'&&cnt==3){
                cout<<s[i];
                break;
            }
            if(s[i]=='-') cnt++;
            cout<<s[i];
        }
        cout<<t;
    }
    return 0;
}

现有思路:现将sum的值求出来,在判断是否为11的倍数,再输出。

问题,可能是判断的地方出了问题

烦请各位大佬指出错误,并告知应该改的地方,谢谢!

注:3天内采纳,对我帮助最大者采纳!


1
已采纳
酷町扫地僧
酷町扫地僧
资深启示者
资深启示者

题号,知识点,现有思路,可能存在的问题,虽然描述还有丰富的空间,但这些要素都有~~

童鞋们都应该按照这种格式去发帖

1
朱优扬
朱优扬
中级天翼
中级天翼

我跟你说一下我的思路吧:

可以先定义一个char类型的数组t(为了后面的代码写起来方便),赋值为' ','0','1','2','3','4','5','6','7','8','9','X'(第一个空格是来占位的)

1.求出sum的值(要注意判断是否是 - 哟);

2.将sum%11

3.判断字符串s的最后的位置是否和t[sum+1]相同    t[sum+1]是因为sum%11有可能是0

4.如果相同,则输出Right

  否则可以将字符串s的最后一位变成正确的,再输出

 

朱优扬在2021-11-19 13:34:06追加了内容

这个不能复制,但是我能看出你的第一个循环的结束位置是不是有点问题?

最后一位为识别码

所以遍历到10就可以了

0-670-82162-4

4为12

-为11

所以想算出sum的值,需要遍历到"2",也就是10

朱优扬在2021-11-19 13:37:10追加了内容

你这个代码问题有点多(一时半会讲不清楚),建议你按照我的思路写一下

我要回答