ZeroJudge D103: ISBN號碼

題目敘述

本題採EOF方式收資料,每筆資料有一個字串。字串為一本書的ISBN號碼,最後一個數字為認證碼,認證碼的計算方式為:第一個數字*1 + 第二個數字*2 + 第三個數字*3 ...以此類推到第九個數字。最後將這些數字的和除以11並取餘數,如果餘數為10則認證碼為一個大寫的英文字母X,其他就是餘數本身的數字。要求判斷輸入的ISBN認證碼是否正確,如果正確,輸出Right,否則輸出正確的ISBN號碼。輸入中的 - (減號) 可以忽略。


範例輸入 #1

0-670-82162-4

0-670-82162-0

範例輸出 #1

Right

0-670-82162-4


解題思路

使用For迴圈將減號排除,並且判斷認證碼為何。

解題程式碼如下 (僅供參考):

#include <iostream>
using namespace std;

int main() {
    string str;
    while (cin >> str)
    {
        string num = "";
        int sum = 0;
        string output = "";
        for (int i = 0; i<str.length()-1; i++)
        {
            if (str[i] != '-') num += str[i];
            output += str[i];
        }
        for (int i = 0; i<num.length(); i++)
        {
            sum += int(num[i] - '0') * (i+1);
        }
        string ans;
        if (sum % 11 < 10) ans = to_string(sum % 11);
        else ans = "X";
        if (ans[0] == str[str.length()-1]) cout << "Right\n";
        else cout << output << ans << "\n";
    }
}

留言

這個網誌中的熱門文章

ZeroJudge M933: 邏輯電路

ZeroJudge A148: You Cannot Pass?!

ZeroJudge A263: 日期差幾天