关于c++输入输出的简单程序问题

代码提交之后,只有一半的题目可以ac,结果是对的。不知道代码哪里出了问题。如图所示。可以编译成功。

img

img


#include<bits/stdc++.h>
using namespace std;
long long i,s,a,b,c,d,m;
char d1;
int main(){
    scanf ( "%d-%d-%d-%c" , &a , &b , &c , &d1 );  
    //这段是精髓
    if ( d1 == 'X' )  //判断X与10
        d = 10;
    else 
        d = d1 - 48;
    m = ( a * 1000 + b ) * 100000 + c;
    //过滤中划线
    for ( i = 1 ; i <= 9 ; i++ )  //依次算
    {
        s += m % 10 * ( 9 - i + 1 );
        //精髓+1
        s %= 11;  //直接求11的余数即可
        m /= 10;  //删除最后一位
    }
    if ( s == d )  //判断是否正确
        cout << "Right";  //正确就输出
    else  //不正确的处理方法
    {
        cout << a << "-" << b << "-" << c << "-";
        if ( s == 10 )  //同样,注意X和10
            cout << "X";
        else 
            cout << s;
    }
    return 0;  //必须要打!否则爆0!
}

1.思路
这道题的核心就是判断最后一位识别码是否正确

1.可以先将正确的识别码定义,mod[12]
然后就将各项的和加起来%11,然后进行判断(可以使用if,进行判定‘-’)
2.若相等则输出 mod[sum%11]=a[12]
3.不相等则赋值,然后输出

2.源码


#include<stdio.h>
int main(){
    char a[14],mod[11]={"0123456789X"};
    scanf("%s",a);
    int j=1,sum=0;
    for(int i=0;i<12;i++){
        if(a[i]=='-')
        continue;
        sum+=(a[i]-'0')*j++;
    }
    if(a[12]==mod[sum%11])
        printf("Right");
    else{
        a[12]=mod[sum%11];
        printf("%s",a);
    }
        
}

余数是10,识别码是X的情况你没处理啊
19行if语句修改如下:
if((z == 10 && q == 'X' ) || (z==q-'0'))
printf("Right");
另外17行删掉,q不需要进行转换