求助!!

P1055 [NOIP2008 普及组] ISBN 号码

zhangtianxin2013 @ 2024-04-10 20:46:47

#include<bits/stdc++.h>
using namespace std;
int main()
{
int a,b,c,d,e,f,g,h,i,s1,s2=0;
char j;
scanf("%1d-%1d%1d%1d-%1d%1d%1d%1d%1d-%c"&a,&b,&c,&d,&e,&f,&g,&h,&i,&j);
s1=(a*1+b*2+c*3+d*4+e*5+f*6+g*7+h*8+i*9)%11;
if(j=='X')  s2=10;
else    s2=j-'0';
if(s1==s2)
cout<<"Right";
else if(s1==10)
cout<<a<<"-"<<b<<c<<d<<"-"<<e<<f<<g<<h<<i<<"-X";
else
cout<<a<<"-"<<b<<c<<d<<"-"<<e<<f<<g<<h<<i<<"-"<<s1;
}

by zhangtianxin2013 @ 2024-04-10 20:47:25

必回关


by Shui_mo @ 2024-04-10 20:51:49

首先定义一个字符c,代表最后一位识别码。

charAt(i)方法是指去字符串中制定位置的字符,i从0开始

这里要注意的是:由于字符存储到内存中是存储字符的ASCII码,例如字符‘0’的ASCII码是48,ASCII与数字字符本身代表的值的转换关系是:数字字符-‘0’的ASCII=数字字符本身代表的值

例如:‘1’是个数字字符,字符‘1’的ASCII是49,所以1=49-48

所以数字字符要做算术运算,需要先将其转换成数字本身的值,转换规则就是字符-‘0’ 或者 字符的ASCII码-‘0’的ASCII


by Shui_mo @ 2024-04-10 20:52:37

要java的方法还是c++啊


by Shui_mo @ 2024-04-10 20:53:29

#include<iostream>
#include<string>
using namespace std;
int main()
{
    string isbncode;
    int mathcode[13]={0},realcode=0;
    long int mycode=0;
    cin>>isbncode;//输入ISBN号 
    for(int i=0;i<=12;i++)//转换为数字 
        {
             mathcode[i]=isbncode[i]-'0'; //字符转换为数字 
        }
        mycode=mathcode[0]*1+mathcode[2]*2+mathcode[3]*3+mathcode[4]*4+mathcode[6]*5+mathcode[7]*6+mathcode[8]*7+mathcode[9]*8+mathcode[10]*9;
        mycode=mycode%11;//求出正确的识别码 
        if (mycode==10)
        {
            mycode='X'-'0';
        } 
        if(mycode==mathcode[12])//如果正确 
           cout<<"Right";//注意第一个字母大写,和题目要求一致 
        else
        {
           //用一一对应的方式输出 
           cout<<mathcode[0]<<'-'
           <<mathcode[2]<<mathcode[3]<<mathcode[4]<<'-'
           <<mathcode[6]<<mathcode[7]<<mathcode[8]<<mathcode[9]<<mathcode[10]
           <<'-'<<char(mycode+'0');//用char函数强制转换为字符类型 
        }
    return 0;
}

by zhangtianxin2013 @ 2024-04-10 20:54:44

@Shui_mo 谢谢


|