社区讨论
60分 求解哪里错了
P1055[NOIP 2008 普及组] ISBN 号码参与者 4已保存回复 12
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 12 条
- 当前快照
- 1 份
- 快照标识符
- @mi7yxw7g
- 此快照首次捕获于
- 2025/11/21 05:54 4 个月前
- 此快照最后确认于
- 2025/11/21 06:46 4 个月前
萌新求助,哪里错了?得分60,其余四个错误是wrong answer too long on 1 line。
CPP#include<iostream>
#include <stdio.h>
using namespace std;
int main()
{
char a[13];//定义存字符数组
int b[9],sum=0,mod,flag=1;//b[9]为用来存储ISBN号码中用来求和的9个数字,
//sum表示9个数字和对应数字乘积的和,mod为余数 ,flag为1表示 ISBN号码正确,否则不正确
scanf("%s",a);//输入ISBN号码
b[0]=a[0]-'0';b[1]=a[2]-'0';//将ISBN号码中用于计算的字符变成数字存储在b中
b[2]=a[3]-'0';b[3]=a[4]-'0';
b[4]=a[6]-'0';b[5]=a[7]-'0';
b[6]=a[8]-'0';b[7]=a[9]-'0';
b[8]=a[10]-'0';
for(int i=0;i<9;i++)//计算乘积总和
sum+=b[i]*(i+1);
mod=sum%11;
if(mod==10) { //当余数为10时
if(a[12]!='X') {//判断 ISBN号码最后一位是否符合要求(为X)若不符合 flag赋值为0;最后一位变成"X";
flag=0;
a[12]='X';
}
}
else { //当余数不为10时(1~9)
if(mod!=(a[12]-'0')){//判断 ISBN号码最后一位是否符合要求(为X)若不符合 flag赋值为0;最后一位变成相应余数(字符型余数)
flag=0;
a[12]=mod+'0';
}
}
if(flag) cout<<"Right";// 如果flag为1,输出Right,否则输出正确的ISBN号码
else cout<<a;
}
回复
共 12 条回复,欢迎继续交流。
正在加载回复...