題目敘述
本題採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";
}
}
留言
張貼留言