P1055 [NOIP2008 普及组] ISBN 号码

在这里插入图片描述

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    
    
	char a[15];
	int b[10],m=0,sum=0;
	for(int i=0;i<13;i++){
    
    
		cin>>a[i];
		if(a[i]!='-' && a[i]!='X'){
    
    
			b[m]=int(a[i]);
			m++;
		}
	}
	for(int i=0;i<9;i++)
		sum=b[i]*(i+1)+sum;
	if(sum%11==10 && a[12]=='X')
		cout<<"Right"<<endl;
	else if(sum%11!=10 && a[12]!='X' && sum%11==int(a[12]))
		cout<<"Right"<<endl;
	else{
    
    
		for(int i=0;i<12;i++)
			cout<<a[i];
		if(sum%11==10)
			cout<<'X'<<endl;
		else
			cout<<sum%11<<endl;
	}
	return 0;
}

第一磁场是错误,因为我运用了python思维下的数据类型转换!
看下面的一个例子:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    
    
	cout<<int('2')<<endl;
	return 0;
}

输出:

50

原因很显而易见了:尝试用 int 进行类型转换时实际上只能得到相应的 ascii 码,而不是整型 2 !
啊,我竟然一时忘记了见过很多次的 ‘9’-‘0’=9 大法?也就是说,整型字符减去 ‘0’ 就变成了相应的整型了,只需按照这个思路微调代码:

#include<iostream>
#include<cstdio>
using namespace std;
int main()
{
    
    
	char a[15];//储存输入的字符串
	int b[10],m=0,sum=0;
	for(int i=0;i<13;i++){
    
    
		cin>>a[i];
		if(a[i]!='-' && a[i]!='X'){
    
    
			b[m]=a[i]-'0';//字符型转换为整型
			m++;
		}
	}
	for(int i=0;i<9;i++)
		sum+=b[i]*(i+1);
	if(sum%11==10 && a[12]=='X')
		cout<<"Right"<<endl;//单独考虑余数为10
	else if(sum%11!=10 && a[12]!='X' && sum%11==a[12]-'0')
		cout<<"Right"<<endl;
	else{
    
    
		for(int i=0;i<12;i++)
			cout<<a[i];
		if(sum%11==10)
			cout<<'X'<<endl;//实现紧凑输出
		else
			cout<<sum%11<<endl;
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/interestingddd/article/details/114239627