#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=0,j=0,sum=0,t=0;
char a[14]={0};
for(i=0;i<13;i++){
scanf("%c",&a[i]);
if(a[i]=='-'){
continue;
}else{
j++;
sum +=(int)a[i]*j;
}
}
getchar();
t=sum%11;
if(t==10){
a[13]='X';
}
if((int)a[13]==t){
printf("Right");
}else{
a[13]=t;
printf("%s",a);
}
return 0;
}
这样写,供参考:
#include<stdio.h>
int main()
{
int a[9], sum = 0;
char last;
scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d",
&a[0], &a[1], &a[2], &a[3], &a[4], &a[5], &a[6], &a[7], &a[8]);
scanf("-%c", &last);
for (int i = 1; i <= 9; i++) //求题目要求的总和
{
sum+=a[i-1]*i;
}
sum %= 11;//mod 11
if (sum < 10 && sum == last - 48)//如果sum不是10并且等于题目给的最后一个数(last-48即为ascii码所对应的数字)
{
printf("Right");
return 0;
}
if (sum == 10 && last == 'X') //如果sum=10并且last==X
{
printf("Right");
return 0;
}
if (sum == 10)
last = 'X';
else
last = sum + 48;
printf("%d-%d%d%d-%d%d%d%d%d-%c", a[0], a[1], a[2], a[3], a[4], a[5], a[6], a[7], a[8], last);
return 0;
}
【以下回答由 GPT 生成】
问题是由于在计算 sum
的过程中,没有正确地将字符转换为对应的数字,导致计算结果出错。
首先,将字符转换为数字的方法是将字符减去字符 '0' 的 ASCII 值,如 sum += (int)(a[i]-'0') * j;
。
其次,还需要在输出字符数组 a
之前添加一个空字符结尾,即 a[14]='\0';
,否则会打印出乱码。
修改后的代码如下所示:
#include <stdio.h>
#include <stdlib.h>
int main(void)
{
int i=0, j=0, sum=0, t=0;
char a[14]={0};
for(i=0; i<13; i++){
scanf("%c", &a[i]);
if(a[i]=='-'){
continue;
}else{
j++;
sum += (int)(a[i]-'0') * j;
}
}
getchar();
t = sum % 11;
if(t == 10){
a[13] = 'X';
}
a[14] = '\0';
if((int)(a[13]-'0') == t){
printf("Right");
}else{
a[13] = '0' + t; // 转换为字符后存入数组
printf("%s", a);
}
return 0;
}
这样修改之后,代码就能正确运行了。
【相关推荐】