백 련 / 2017 대학원생 온라인 시험 면제 B: ISBN 번호

2712 단어 백 련 OJ/poj
제목:http://jmunetds.openjudge.cn/crace1/8/
8: ISBN 번호
-----------------------------------------------------
총 시간 제한: 
1000ms
 
메모리 제한: 
500000kB
묘사 하 다.
제목 설명
정식 출판 된 모든 도서 에는 ISBN 번호 가 대응 되 는데 ISBN 코드 는 9 자리 숫자, 1 자리 식별 코드 와 3 자리 구분자 가 있 는데 그 규정 형식 은 'x - xxx - xxxx - x' 이다. 그 중에서 기호 '-' 는 구분자 (키보드 의 감호) 이 고 마지막 은 식별 코드 이다. 예 를 들 어 0 - 670 - 82162 - 4 는 하나의 표준 ISBN 코드 이다.ISBN 코드 의 첫 번 째 숫자 는 책의 출판 언어 를 나타 낸다. 예 를 들 어 0 은 영 어 를 대표 한다.첫 번 째 구분자 '-' 이후 세 명의 디지털 대표 출판사, 예 를 들 어 670 은 베 이 징 출판 사 를 대표 한다.두 번 째 구분자 뒤의 다섯 자리 숫자 는 이 책의 출판사 번 호 를 대표 한다.마지막 은 식별 코드.
식별 코드 의 계산 방법 은 다음 과 같다.
첫 번 째 숫자 곱 하기 1 에 지난번 숫자 곱 하기 2...............................................................................예 를 들 어 ISBN 번호 0 - 670 - 82162 - 4 의 식별 코드 4 는 이렇게 얻 었 다. 067082162 라 는 9 개의 숫자 에 대해 왼쪽 에서 오른쪽으로 각각 1, 2,..., 9 를 곱 하고 다시 합 쳐 0 이다.×1+6×2+……+2×9 = 158, 그리고 158 mod 11 의 결과 4 를 식별 코드 로 한다.
입력 한 ISBN 번호 의 식별 코드 가 정확 한 지 여 부 를 판단 하 는 프로그램 을 만 드 는 것 이 작업 입 니 다. 정확 하 다 면 'Right' 만 출력 합 니 다.오류 가 발생 하면 올 바른 ISBN 번호 로 출력 합 니 다.
 
입력
입력 형식: 입력 파일 isbn. in 은 한 줄 만 있 고 하나의 문자 시퀀스 로 책의 ISBN 번 호 를 표시 합 니 다.
출력
출력 형식: 출력 파일 isbn. out 은 모두 한 줄 입 니 다. 입력 한 ISBN 번호 의 식별 코드 가 정확 하 다 면 "Right" 를 출력 합 니 다. 그렇지 않 으 면 규정된 형식 에 따라 정확 한 ISBN 번호 (구분자 "-" 포함) 를 출력 합 니 다.
샘플 입력
샘플 입력 \ # 1:
0-670-82162-4
샘플 입력 \ # 2:
0-670-82162-0
샘플 출력
출력 샘플 \ # 1:
Right
출력 샘플 \ # 2:
0-670-82162-4
 
-----------------------------------------------------
문제 풀이 의 사고 방향.
배열 이 경 계 를 넘 는 것 을 방지 하고 배열 이 경 계 를 넘 으 면 예상 치 못 한 결과 가 발생 할 수 있 습 니 다. 예 를 들 어 배열 code [] 가 경 계 를 넘 어 문자열 isbn [] 의 첫 두 자 리 를 지 웠 습 니 다.
-----------------------------------------------------
코드  
#include

const int index[9] = {0,2,3,4,6,7,8,9,10};  //   “-”    

int main()
{
    char isbn[14] = {};                     // ISBN :13+1(   )
    int code[9] = {};                       //    
    int check = 0;                          //    
    int result = 0;                         //     
    scanf("%s", isbn);
    int i=0;
    for (i=0;i<9;i++)
    {
        code[i] = isbn[index[i]]-48;        // int
        result += (i+1)*code[i];
    }
    check = isbn[12];                       // char
    result = result%11;
    if(result==10)
    {
        result = 'X';
    }
    else
    {
        result += 48;                       // char
    }
    if(result==check)
    {
        printf("Right");
    }
    else
    {
        isbn[12] = result;
        printf("%s", isbn);
    }
    return 0;
}

좋은 웹페이지 즐겨찾기