開発環境
- macOS Mojave - Apple (OS)
- Emacs (Text Editor)
- Xcode - Apple
- Windows 10 Pro (OS)
- Visual Studio (コンパイラー)
- Visual Studio Code (Text Editor)
- C++17 (プログラミング言語)
Modern C++チャレンジ ―C++17プログラミング力を鍛える100問 (Marius Bancila(著)、島 敏博(監修)、黒川 利明(翻訳)、オライリージャパン)の1章(数学の問題)、問題14(ISBNの検証)の解答を求めてみる。
コード
#include <iostream> #include <string> bool validate(std::string isbn) { if (isbn.length() == 10) { int check_digit = 0; for (size_t i = 0; i < 9; i++) { if (isbn[i] < '0' || '9' < isbn[i]) { return false; } check_digit += (isbn[i] - '0') * (10 - i); } check_digit = 11 - check_digit % 11; if (isbn[9] - '0' == check_digit) { return true; } } return false; } int main() { std::string isbns[] = {"487311869", "4873118697", "48731186978", "4873118698", "4a73118697"}; for (size_t i = 0; i < 5; i++) { std::cout << isbns[i] << ": "; if (validate(isbns[i])) { std::cout << "10桁のISBN-10番号として正しい。"; } else { std::cout << "10桁のISBN-10番号として正しくない。"; } std::cout << std::endl; } }
入出力結果(VS 2017 用 x64 Native Tools コマンド プロンプト、Terminal)
C:\Users\...>cl /O2 sample14.cpp && sample14.exe Microsoft(R) C/C++ Optimizing Compiler Version 19.16.27027.1 for x64 Copyright (C) Microsoft Corporation. All rights reserved. sample14.cpp C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.16.27023\include\xlocale(319): warning C4530: C++ 例外処理を使っていますが、アンワインド セマンティクスは有効にはなりません。/EHsc を指定してください。 Microsoft (R) Incremental Linker Version 14.16.27027.1 Copyright (C) Microsoft Corporation. All rights reserved. /out:sample14.exe sample14.obj 487311869: 10桁のISBN-10番号として正しくない。 4873118697: 10桁のISBN-10番号として正しい。 48731186978: 10桁のISBN-10番号として正しくない。 4873118698: 10桁のISBN-10番号として正しくない。 4a73118697: 10桁のISBN-10番号として正しくない。 C:\Users\...>
0 コメント:
コメントを投稿