关注??
by Dimly_dust @ 2020-02-19 16:00:16
代码已准备好
by Dimly_dust @ 2020-02-19 16:01:52
题目的思路很简单,先将9个数字求和,然后对11取余,如果余数等于10则识别码为‘X’
否则为余数,在判断是不是等于所输入数字字符串中最后一个数的值;
```
#include<iostream>
#include<bits/stdc++.h>
#include<algorithm>
using namespace std;
int main()
{
char a[20],t;
int sum=0,flag=1;
for(int c=0;c<13;c++)
{
cin>>a[c];
}/*输入字符串*/
for(int i=0;i<strlen(a)-1;i++)
{
if(a[i]>='0'&&a[i]<='9')
{
sum+=flag*(a[i]-'0');
flag++;
}
}/*求和*/
t=sum%11+'0';
if(t==10+'0') t='X';/*确认识别码*/
/*判断是否相等*/
if(t==a[12]
{
cout<<"Right";
}
else {
for(int j=0;j<strlen(a)-1;j++)
{
cout<<a[j];
}
cout<<t;
}
return 0;
}
```
by Dimly_dust @ 2020-02-19 16:02:42
@[缥缈于尘](/user/316896) 我知道思路啊,我只是不知道我的怎么W了,orz
by zhazhawei @ 2020-02-19 16:09:03
@[zhazhawei](/user/295283)
```cpp
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
cin>>s;
int k = 1;//相应乘得数
int sum = 0;//和
int l = s.length();//字符串长度
for(int i=0;i<l-1;i++){//对sum进行累加取模
if(s[i]=='-'){
continue;
}
else{
sum += k*(s[i]-'0');
sum = sum % 11;
k++;
}
}
sum = sum % 11;//取余
if(sum == s[l-1]-'0'||(s[l-1]=='X'&&sum==10)){//如果等于最后一位数字
cout<<"Right"<<endl;
}
else{
for(int i=0;i<l-1;i++)//前面的不变
cout<<s[i];
if(sum == 10)//否则看是否等于10
cout<<'X'<<endl;
else
cout<<sum<<endl;
}
return 0;
}
```
自己对照一下吧,具体问题就是最后一个字符如果是`X`就没法正确判断是不是`Right`
by zhangboju @ 2020-02-19 17:27:19
@[zhangboju](/user/231600) 感谢!!
by zhazhawei @ 2020-02-20 18:39:33