/****************************************************************************** * This program computes Renard (Preferred) Numbers * * Copyright © 2017 Richard Lesh. All rights reserved. *****************************************************************************/ #undef NDEBUG #include "Utils.hpp" #include #include #include #include #include #include std::locale utf8loc(std::locale(), new std::codecvt_utf8); using namespace std; int main(int argc, char **argv) { setlocale(LC_ALL, "en_US.UTF-8"); wcout.imbue(utf8loc); wcin.imbue(utf8loc); if (argc != 3) { wcout << L"Syntax: " << Utils::UTF8_to_wstring(argv[0]) << L" 5|10|20|40 precision" << endl; exit(1); } int series = Utils::stoiWithDefault(Utils::UTF8_to_wstring(argv[1]), 5); int precision = Utils::stoiWithDefault(Utils::UTF8_to_wstring(argv[2]), 2); if (series < 5) { series = 5; } if (series > 40) { series = 40; } if (precision < 0) { precision = 0; } if (precision > 4) { precision = 4; } vector renard_numbers = {}; double factor = pow(10.0, 1.0 / series); Utils::push(renard_numbers, 1.0); for (auto i = 1; i < series; ++i) { Utils::push(renard_numbers, renard_numbers[i - 1] * factor); } vector format_str = {L"%.0f", L"%.1f", L"%.2f", L"%.3f", L"%.4f"}; wcout << L"R" << series << L": " << endl; bool first = true; for (int range_start = 1; range_start <= 100; range_start *= 10) { for (int i = 0; i < series; ++i) { if ((!first)) { wcout << L", "; } wcout << Utils::sprintf(format_str[precision], renard_numbers[i] * range_start); first = false; } if (precision > 0) { --precision; } } wcout << L", 1000" << endl; return 0; }