super_D @ 2024-10-06 14:04:49
#include <stdio.h>
int if_X(char c)
{
int i;
if(c=='X') i=10;
else i=c-48;
return i;
}
int main()
{
char c_ISBN[13];
scanf("%s",&c_ISBN);
int i_ISBN[10],cnt=0,label=0;
for(int i=0;i<11;i++)
{
if(c_ISBN[i]=='-')
{
cnt++;
continue;
}
else i_ISBN[i-cnt]=(c_ISBN[i]-48)*(i-cnt+1);
}
i_ISBN[9]=if_X(c_ISBN[12]);
for(int j=0;j<9;j++) label+=i_ISBN[j];
if(label%11==i_ISBN[9]) puts("Right");
else
{
c_ISBN[12]=0x30+label%11;
puts(c_ISBN);
}
}
by super_D @ 2024-10-06 14:05:31
运行结果都没问题呀
by xzh15960292751 @ 2024-10-06 14:12:41
@li_duter
/*ISBN 号码*/
#include <iostream>
#include <cstring>
using namespace std;
int main() {
char s[14],c;
cin >> s;
int sum = 0,k = 0;
for(int i=0; i<11; i++) {
if(s[i] != '-') {
k++;
sum += k * (s[i] - '0'); //-0是为了将字符串变成普通数字
}
}
sum %= 11;
if(sum == 10) c = 'X';
else c = sum + '0';
if(c == s[12]) cout << "Right" << endl;
else {
s[12]=c;
cout << s;
}
return 0;
}
by xzh15960292751 @ 2024-10-06 14:30:19
@li_duter 以下是用你的代码修改的:
字符数组初始化问题:
char c_ISBN[13];
只分配了13个字符的空间,但你的输
入可能是13个字符(包括结尾
的'\0'),所以可能会导致数组越
界。建议将数组大小改为 14。
字符转换为数字的方式:
在 if_X 函数中,你将字符 X 转换为
数字 10,但没有处理其他字符的情
况。应该确保所有字符都能正确转换
为数字。
识别码计算错误:
在计算识别码时,你需要确保所有数
字都被正确处理,并且在最后一步中
正确计算余数。
输出正确的 ISBN 号码:
当识别码不正确时,你需要输出完整
的 ISBN 号码,包括分隔符 -。
以下是修正后的代码:
#include <stdio.h>
int if_X(char c)
{
if(c == 'X') return 10;
else return c - '0';
}
int main()
{
char c_ISBN[14]; // 增加一个字符空间以容纳结束符
scanf("%s", c_ISBN);
int i_ISBN[10], cnt = 0, label = 0;
for(int i = 0; i < 12; i++) // 处理前12个字符
{
if(c_ISBN[i] == '-')
{
cnt++;
continue;
}
else
i_ISBN[i - cnt] = (c_ISBN[i] - '0') * (i - cnt + 1); // 使用 '0' 而不是 48
}
i_ISBN[9] = if_X(c_ISBN[12]); // 处理识别码
for(int j = 0; j < 9; j++) label += i_ISBN[j];
if(label % 11 == i_ISBN[9]) puts("Right");
else
{
char ch;
int mod_number = label % 11;
if (mod_number == 10) ch = 'X';
else ch = '0' + mod_number;
c_ISBN[12] = ch;
puts(c_ISBN);
}
return 0;
}
主要修正点:
数组大小:将 c_ISBN 数组大小增加到 14。
字符转换:在 if_X 函数中,使用 '0' 而不是 48 来转换字符为数字。
识别码计算:确保所有数字都被正确处理。
输出正确的 ISBN 号码:在识别码不正确时,输出完整的 ISBN 号码。
通过这些修正,你的程序应该能够正确处理所有输入,并输出正确的结果。