zhkkk_ @ 2024-09-03 20:46:29
#include <bits/stdc++.h>
using namespace std;
int a,b,c;
char x,y,z,d;
int main()
{
cin>>a>>x>>b>>y>>c>>z>>d;
if((a*1+b/100*2+b%100/10*3+b%10*4+c/10000*5+c%10000/1000*6+c%1000/100*7+c%100/10*8+c%10*9)%11==d)
cout<<"Right";
else if((a*1+b/100*2+b%100/10*3+b%10*4+c/10000*5+c%10000/1000*6+c%1000/100*7+c%100/10*8+c%10*9)%11==10)
{
if(d=='X') cout<<"Right";
else cout<<a<<"-"<<b<<"-"<<c<<"-"<<'X';
}
else cout<<a<<"-"<<b<<"-"<<c<<"-"<<(a*1+b/100*2+b%100/10*3+b%10*4+c/10000*5+c%10000/1000*6+c%1000/100*7+c%100/10*8+c%10*9)%11;
return 0;
}
by SuperAlex4 @ 2024-09-03 20:56:50
其实你可以用中间变量的
(a*1+b/100*2+b/10%10*3+b%10*4+c/10000*5+c/1000%10*6+c/100%10*7+c/10%10*8+c%10*9)%11==(d&15)
数据里貌似没有前导 0 的情况。你想要可以自己加
by zhkkk_ @ 2024-09-03 21:00:46
@SuperAlex4 为什么#1过不了呢
by SuperAlex4 @ 2024-09-03 21:09:49
@xx31_qwq d
是个 char
,ASCII 是数字的值按位或
你这么判只有 Right
的时候才会错。按常识来说 CCF 的数据应该不会让你输出一个 Right
就能骗很多分
by zhkkk_ @ 2024-09-03 21:20:37
@SuperAlex4 好的谢谢
by llhhss @ 2024-09-04 20:14:44
@xx31_qwq
#include <iostream>
#include <cstring>//头文件不解释
using namespace std;
int main()
{
char s[14],c;
cin>>s;
int h=0,k=0;
for(int i=0;i<11;i++)
{
if(s[i]!='-')
{
k++;
h+=k*(s[i]-'0');//-0是为了将字符串变成普通数字
}
}
h%=11;
if(h==10) c='X';
else c=h+'0';
if(c==s[12]) cout<<"Right"<<endl;
else
{
s[12]=c;
cout<<s;
}
return 0;
}