社区讨论

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 条回复,欢迎继续交流。

正在加载回复...