水题,不过个别测试用例还需要注意,开始由于忘记了0而WA了2次。
题目的主要思想是先判断字符中每一位是否为数字,若是数字,则进行题目中要求的运算。最后求和,求余。
代码如下:
#include<iostream>
#include<string>
using namespace std;
int main() {
string s;
while (cin>>s && s != "\0") {
int num_to_multiply = 10, last_weight, sum = 0;
for (int i = 0 ; i < s.size() ; i++) {
if (s[i]>=48 && s[i] <= 57) { // 0--48,9--57
sum += (s[i]-'0') * num_to_multiply;
num_to_multiply--;
}
}
sum %= 11;
if (sum == 1) {
cout<<s<<"-"<<"X"<<endl;
}
else if(sum == 0)
cout<<s<<"-"<<"0"<<endl;
else
cout<<s<<"-"<<11-sum<<endl;
}
return 0;
}