2019年2月28日木曜日

開発環境

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 コメント:

コメントを投稿