有没有大佬帮忙看看4/8测试点为什么过不去QAQ

P1055 [NOIP2008 普及组] ISBN 号码

Aether_z @ 2022-01-25 12:59:49


#include <iostream> 

using namespace std; 

int main()
{ 
        int m = 0, j = 1;
        string n;
        getline(cin, n);

        for(int i = 0; i < n.size() - 1; i++ )
        {
                if(n[i] != '-')
                { 
                        m += (n[i]-'0') * j;
                        j++;
                }
        }

        m = m % 11;
        if(m == n[12]-'0' || (n[12]=='X' && m==10))
                cout << "Right" << endl;
        else
        {
                for(int i = 0; i < n.size() - 1; i++ )
                {
                        cout << n[i];
                }

                if(m == 10)
                        cout << 'X' << endl;
                else
                        cout << m << endl;
        }

        return 0;
}```

4测试点输入是6-670-82162-X
输出是Right

by ssxvngn @ 2022-01-25 13:05:02

@Aether_z 因为这一部分:


for(int i = 0; i < n.size()-1; i++ ){
    if(n[i] != '-'){ 
        m += (n[i]-'0') * j;
        j++;
        }
}

没判断最后一位为x


by ningago @ 2022-01-25 13:08:29

@Aether_z

1.把n.size - 1改成1211

能过4

2.把getline改成cin >> ...

能直接过


by ningago @ 2022-01-25 13:10:12

@Aether_z

getline读入的是整行,一般在读有空格的信息时用,如果数据中出题人手贱打了个空格或者奇怪的东西,就也会被读进来


by Aether_z @ 2022-01-25 13:38:11

@一个pupil 但是这个循环没有循环到最后一位就结束了,它读不到X


by Aether_z @ 2022-01-25 13:40:47

@ningago 通过啦,谢谢大佬!但是cin不是遇到空格就会中断输入吗。。。(菜鸡提问)


by ningago @ 2022-01-25 13:48:15

@Aether_z

这个题没空格啊……


by Aether_z @ 2022-01-25 13:52:43

@ningago 对哦,谢谢大佬,就当我脑子瓦特了


by ssxvngn @ 2022-01-25 13:58:11

@Aether_z 、我这个人记错题意了……


|