FYH666666 @ 2023-10-19 22:24:04
#include<stdio.h>
#include<string.h>
int main(){
int n,sum=0,cnt=0;
char a[99];
for(int i=1;i<=13;i++){
scanf("%s",a[i]);
}
for(int i=1;i<=12;i++){
if(a[i]!='-'){
cnt++;
sum=sum+a[i]*cnt;
}
}
if(sum%11<10) sum=sum%11;
else if(sum%11==10) sum='X';
if(a[13]==sum){
printf("Right");
return 0;
}
else{
for(int j=1;j<=13;j++){
printf("%c",a[j]);
}
}
return 0;
}
by zhouruoheng @ 2023-10-19 22:58:14
RE 是因为第7行的 printf 少了 & ,而且不应该用 %s 要用 %c 。
这样交上去还是错的,因为你直接用字符进行计算了,就是 a[i] ,char 型对应的数是该字符的 ASCII值,如 '0' 对应的是48,计算就会出错。
by zhouruoheng @ 2023-10-19 23:04:21
这样改
#include<stdio.h>
#include<string.h>
int main(){
int sum=0,cnt=0;
char a[99];
for(int i=1;i<=13;i++){
scanf("%c",&a[i]);//格式要正确
}
for(int i=1;i<=12;i++){
if(a[i]!='-'){
cnt++;
sum=sum+(a[i]-'0')*cnt;//字符转为数字
}
}
if(sum%11<10) sum=sum%11+'0';//数字转为字符
else if(sum%11==10) sum='X';
if(a[13]==sum){
printf("Right");
return 0;
}
else{
a[13]=sum;//不要忘了修改最后一位
for(int j=1;j<=13;j++){
printf("%c",a[j]);
}
}
return 0;
}
a[i] 减去 '0' 就能得到真正的数,同理,sum加上'0'就能得到对应的字符。 '0'就是0所对应的ASCII值。
by FYH666666 @ 2023-10-20 12:41:25
@zhouruoheng 谢谢