CCF ISBN号码(简便解题思路)

本文介绍了一种使用C++实现校验ISBN号的方法。通过读取带有字符的9位数字,去除非数字字符,计算其和,并验证最后一位校验码是否正确。此方法适用于需要校验ISBN号的场景。

思路

本体主要问题是将前九位数按题目要求算出和,由于输入的数是带有字符的所以我们可以先利用字符串来记录输入数据。让后将数字取出来,’-'字符可直接丢弃。

#include <iostream>
#include <string>
using namespace std;
int main(int argc, char** argv) {
	string s;
	cin>>s;
	int t=s.size();//记录字符串长度 
	char a[t];//用来存储数据 
	int sum=0;
	int k=0; 
	for(int i=0;i<t-1;i++)
	{
		if(s[i]!='-')
		{
			a[k++]=s[i];//将所有的数字存入a中 
		}
	}
	a[k]='\0';
	for(int i=0;i<k;i++)
	{
		sum+=(a[i]-'0')*(i+1);//根据题目要求计算sum 
	}
	if(s[t-1]=='X'&&sum%11==10)
	{
		cout<<"Right"<<endl;
	}
	else if(sum%11==(s[t-1]-'0'))
	{
		cout<<"Right"<<endl;
	}
	else
	{
		if(sum%11==10)
		{
			s[t-1]='X';//直接将s字符串的最后一个字符替换 
			cout<<s<<endl;//输出s字符串 
		}
		else
		{
			s[t-1]=(sum%11+'0');
			cout<<s<<endl;	
		}
	}
	return 0;
}

有什么问题可以留在评论区。

由于缺少第33次CCF CSP认证第一题的具体题目内容,只能根据常见的CCF CSP第一题类型给出通用的解题思路。通常第一题难度较低,多涉及基础的数据处理和简单算法。 ### 输入处理 若输入为整数序列,可使用循环和输入函数读取每个整数。例如在C++中,可使用`cin`读取: ```cpp #include <iostream> #include <vector> using namespace std; int main() { int n; cin >> n; vector<int> nums(n); for (int i = 0; i < n; i++) { cin >> nums[i]; } return 0; } ``` 若输入为字符串,同样可使用循环读取每个字符串,还可能需要对字符串进行大小写转换等处理,如在C++中将字符串转换为小写: ```cpp #include <iostream> #include <string> using namespace std; string toLowercase(string s) { for (int i = 0; i < s.length(); i++) { if (s[i] >= 'A' && s[i] <= 'Z') { s[i] = s[i] - 'A' + 'a'; } } return s; } int main() { string s; cin >> s; s = toLowercase(s); cout << s << endl; return 0; } ``` ### 数据处理 根据题目要求对输入的数据进行处理。若题目要求统计词频,可使用`map`来存储每个单词及其出现的次数: ```cpp #include <iostream> #include <string> #include <map> using namespace std; int main() { int n; cin >> n; map<string, int> wordCount; for (int i = 0; i < n; i++) { string word; cin >> word; wordCount[word]++; } for (auto it = wordCount.begin(); it != wordCount.end(); it++) { cout << it->first << ": " << it->second << endl; } return 0; } ``` ### 输出结果 处理完数据后,按照题目要求输出结果。若要求输出统计结果,可直接遍历存储统计信息的数据结构并输出: ```cpp #include <iostream> #include <vector> using namespace std; int main() { vector<int> nums = {1, 2, 3, 4, 5}; int sum = 0; for (int num : nums) { sum += num; } cout << "Sum: " << sum << endl; return 0; } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值