本题难点个人觉得在于最后一位的读入 面对既可能是数字又可能是“X” 这时候如何选择最后一位读入的变量就很重要了 那么第一用int 时候肯定是不行的 因为这样读出来的X 直接变成了‘0’ 这与数字0相斥 str类型也不行 虽然能够读入“X”
但是呢 读入的数字完全失去了比大小的能力了 所以 正确的做法是选择 char类型 先进行对是不是“X”的条件判断 然后再对是数字的情况 通过 int d_value = d - '0'; 语句将char转化成int值 类似课上面输出小写字母对应的大写字母的方式 char Big = n + 'A' - 'a' (n + 32 )
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main (){
int a,b,c; char d ;
char slash;
cin >>a>>slash>>b>>slash>>c>>slash>>d;
int B = b%10 *4 + b/10%10 *3 + b/100 *2;
int C = c/10000 * 5 + c /1000 % 10* 6 + c /100 %10 * 7 + c /10 %10 *8+c%10*9;
int Reco = (a + B + C)%11;
if (d == 'X') {
if (Reco == 10) cout << "Right";
else cout << a << "-" << b << "-" << c <<"-" <<Reco ;
}
if (d >= '0' && d <= '9'){
if (Reco == 10){
cout << a << "-" << b << "-" << c << "-X" ;
return 0;
}
else {
int d_value = d -'0';
if (Reco == d_value) cout << "Right";
else cout << a << "-" << b << "-" << c << "-" <<Reco ;
}
}
return 0;
}