代码提交之后,只有一半的题目可以ac,结果是对的。不知道代码哪里出了问题。如图所示。可以编译成功。
#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不需要进行转换