这道题目我使用的暴力法。。。
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[30];
cin>>s;
int k1=s[0]-'0',k2=s[2]-'0',k3=s[3]-'0',k4=s[4]-'0',k5=s[6]-'0',k6=s[7]-'0',k7=s[8]-'0',k8=s[9]-'0',k9=s[10]-'0';
int m = 1*k1+2*k2+3*k3+4*k4+5*k5+6*k6+7*k7+8*k8+9*k9;
int n = m%11;
if(n==10)
{n = 'X';}
if(n==s[12]-'0')//仅仅是n为数字
{cout<<"Right";}
else if(n==s[12])//此时n=='X'
{cout<<"Right";}
else if(n=='X'){//当n=='X'但是和s[12]不等时
s[12]=n;
cout<<s;
}
else{//此时n为数字
s[12]=n+'0';
cout<<s;
}
return 0;
}
然后参考了洛谷大佬得巧妙方法
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[20],t[20]="0123456789X";//把余数存放在一个字符数组里
int j=1,sum=0;//j是计数的,第j数字这样
cin>>s;
for(int i=0;i<11;i++){
if(s[i]=='-')continue;
else{
sum=sum+j*(s[i]-'0');//如果不是-,那就是数字,就算一下目前的和
j++;//计数器加1
}
}
if(t[sum%11]==s[12])//如果两者相等
cout<<"Right";
else
{
s[12]=t[sum%11];
cout<<s;
}
return 0;
}