P1055 [NOIP2008 普及组] ISBN 号码 题解

  • C++ 实现
// ISBN: International Standard Book Number 
// -*- coding: utf-8 -*-
//  @ Date   : 2020/5/20 13:14
//  @ Author : RichardLau_Cx
//  @ file   : Richard.cpp
//  @ IDE    : Dex-C++
//  @ Source : luogu

#include <iostream>
#include <string>

using namespace std;

int main() {
	string ISBN;
	cin >> ISBN;
	int sum = 0;  // 记录逐位相乘后再相加的结果 
	int id;  // 存放对应识别码 
	int times = 0;  // 存放要乘以的倍数 
	char temp;
	int num;
	
	for (int i=0; i < 11; i++) {
		if (i == 1 || i == 5 || i == 11) {
			continue;
		}
		
		times++; 
//		cout << sum << endl;  // 之前忽略了直接拿来计算,是用的字符的ASCII码值 
		
		sum += times * ((int)ISBN[i] - 48);  // 因为字符0的ASCII码是48,所以需要减去,就是这个字符的真实数值
//		cout << sum <<"+=" << times << "*" << ISBN[i] << endl;
	}
	
	id = sum % 11;
	
//	cout << "id: " << endl; 
	
	if (id == 10) {
		temp = 'X';
	} else {
		temp = (char)(id+48);  // 加48转化为数学相应的ASCII码值,再转化为字符 
	}
	
	if (temp == ISBN[12])
	{
		cout << "Right" << endl;
	 } else {
	 	ISBN[12] = temp;
	 	cout << ISBN;
	 }
	
	return 0;
}  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值