大佬救救,0分!

P1055 [NOIP2008 普及组] ISBN 号码

@[LAOLIU888](/user/977725) ```cpp #include <bits/stdc++.h> using namespace std; int main(){ char a,b,c,d,e,f,g,h,i,j; int x; scanf("%c-%c%c%c-%c%c%c%c%c-%c",&a,&b,&c,&d,&e,&f,&g,&h,&i,&j); x=((int(a)-48)*1+(int(b)-48)*2+(int(c)-48)*3+(int(d)-48)*4+(int(e)-48)*5+(int(f)-48)*6+(int(g)-48)*7+(int(h)-48)*8+(int(i)-48)*9)%11; if((x==10)&&(j=='X')) { printf("Right"); return 0; } if((x==10)&&(j!='X')) { printf("%c-%c%c%c-%c%c%c%c%c-%c",a,b,c,d,e,f,g,h,i,'X'); return 0; } if(x==int(j)-48) { printf("Right"); return 0; } else { printf("%c-%c%c%c-%c%c%c%c%c-%d",a,b,c,d,e,f,g,h,i,x); return 0; } return 0; } ```
by midsummer_zyl @ 2023-07-09 20:38:08


1. 输入读取错误:在代码中,你使用了一些字符数组和循环来读取输入的ISBN号码。然而,根据题目描述,ISBN号码的格式是"x-xxx-xxxxx-x",其中符号"-"是分隔符。你应该使用字符类型的变量来逐个读取并处理每个字符,而不是使用字符数组。正确的输入读取方式应该是类似这样的:`cin >> justin >> ji >> jin >> pp;`。 2. 数字转换错误:在计算识别码时,你将输入的字符转换为数字存储在`ibsn`数组中。然而,你使用了`long long`类型的循环索引变量,而实际上这个索引应该是从1到9,超出了数组的有效索引范围。修改循环索引的类型为`int`并将索引范围改为`1`到`9`。 3. 输出格式错误:在输出结果时,你使用了多余的循环和打印语句来构建输出的ISBN号码。实际上,你只需要按照指定的格式输出正确的ISBN号码即可。可以直接使用`cout`语句输出正确的ISBN号码。 以下是修改后的代码: ```cpp #include <iostream> using namespace std; int main() { char justin, ji, jin, pp; int ibsn[9]; int pd, sum = 0; cin >> justin >> ji >> jin >> pp; if (pp >= '0' && pp <= '9') pd = pp - '0'; else pd = 10; for (int i = 1; i <= 9; i++) { cin >> ibsn[i]; sum += ibsn[i] * i; } sum %= 11; if (sum == pd) { cout << "Right"; } else { cout << justin << "-" << ji << jin << "-"; for (int i = 1; i <= 9; i++) { cout << ibsn[i]; } cout << "-" << sum; } return 0; } ```
by chenfeizhou @ 2023-07-09 20:41:09


@[midsummer_zyl](/user/1025321) @[chenfeizhou](/user/731596) 谢谢你们的援助
by TUHAOWENNS @ 2023-07-10 13:32:24


|