?? 3.2.cpp
字號:
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
class ISBN
{
private:
int groupcode;
int publishcode;
int bookcode;
int verifycode;
void substr(char* subs,const char *str,int begin,int len)
{
strcpy(subs,str+begin);
subs[len]='\0';
return;
}
void itoa(char* str,int i)
{
int magnitude=1,num=1;
for(int j=i;j>10;j/=10)
{
magnitude*=10;
num++;
}
for(j=0;j<num-1;i%=magnitude,magnitude/=10,j++)
str[j]=i/magnitude+48;
str[j++]=i+48;
str[j]='\0';
}
public:
ISBN(char* isbn)
{
setISBN(isbn);
}
void setISBN(char* isbn)
{
char temp[14];
substr(temp,isbn,0,1);
groupcode=atoi(temp);
substr(temp,isbn,2,3);
publishcode=atoi(temp);
substr(temp,isbn,6,5);
bookcode=atoi(temp);
if(isbn[12]<48||isbn[12]>57)
verifycode=isbn[12];
else
{
substr(temp,isbn,12,1);
verifycode=atoi(temp);
}
}
void getISBN(char* isbn)
{
char temp[14];
itoa(isbn,groupcode);
strcat(isbn,"-");
itoa(temp,publishcode);
strcat(isbn,temp);
strcat(isbn,"-");
itoa(temp,bookcode);
strcat(isbn,temp);
strcat(isbn,"-");
if(verifycode<0||verifycode>10)
{
temp[0]=verifycode;
temp[1]='\0';
}
else
itoa(temp,verifycode);
strcat(isbn,temp);
}
bool isValid()
{
int sum=groupcode;
int temp=publishcode;
for(int i=0;i<3;i++)
{
sum+=temp/(int)pow(10,2-i)*(int)pow(10,i+1);
temp%=(int)pow(10,2-i);
}
temp=bookcode;
for(i=0;i<5;i++)
{
sum+=temp/(int)pow(10,4-i)*(int)pow(10,i+1);
temp%=(int)pow(10,4-i);
}
if((sum%11==10&&verifycode=='x')||(sum%11!=10&&sum%11==verifycode))
return true;
else return false;
}
};
void main()
{
char str[]={"0-254-45785-7"};
bool isvalid;
ISBN isbn(str);
isvalid=isbn.isValid();
if(isvalid)
printf("%s is valid!\n",str);
else
printf("%s is invalid!\n",str);
return;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -