#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char a[15];
int b[10],m=0,sum=0;
for(int i=0;i<13;i++){
cin>>a[i];
if(a[i]!='-' && a[i]!='X'){
b[m]=int(a[i]);
m++;
}
}
for(int i=0;i<9;i++)
sum=b[i]*(i+1)+sum;
if(sum%11==10 && a[12]=='X')
cout<<"Right"<<endl;
else if(sum%11!=10 && a[12]!='X' && sum%11==int(a[12]))
cout<<"Right"<<endl;
else{
for(int i=0;i<12;i++)
cout<<a[i];
if(sum%11==10)
cout<<'X'<<endl;
else
cout<<sum%11<<endl;
}
return 0;
}
第一磁场是错误,因为我运用了python思维下的数据类型转换!
看下面的一个例子:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
cout<<int('2')<<endl;
return 0;
}
输出:
50
原因很显而易见了:尝试用 int 进行类型转换时实际上只能得到相应的 ascii 码,而不是整型 2 !
啊,我竟然一时忘记了见过很多次的 ‘9’-‘0’=9 大法?也就是说,整型字符减去 ‘0’ 就变成了相应的整型了,只需按照这个思路微调代码:
#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
char a[15];//储存输入的字符串
int b[10],m=0,sum=0;
for(int i=0;i<13;i++){
cin>>a[i];
if(a[i]!='-' && a[i]!='X'){
b[m]=a[i]-'0';//字符型转换为整型
m++;
}
}
for(int i=0;i<9;i++)
sum+=b[i]*(i+1);
if(sum%11==10 && a[12]=='X')
cout<<"Right"<<endl;//单独考虑余数为10
else if(sum%11!=10 && a[12]!='X' && sum%11==a[12]-'0')
cout<<"Right"<<endl;
else{
for(int i=0;i<12;i++)
cout<<a[i];
if(sum%11==10)
cout<<'X'<<endl;//实现紧凑输出
else
cout<<sum%11<<endl;
}
return 0;
}