say: in progress
This commit is contained in:
parent
75a9e236e2
commit
41ab570e93
2 changed files with 98 additions and 0 deletions
85
cpp/say/say.cpp
Normal file
85
cpp/say/say.cpp
Normal file
|
|
@ -0,0 +1,85 @@
|
|||
#include "say.h"
|
||||
|
||||
#include <unordered_map>
|
||||
|
||||
#include <iostream>
|
||||
|
||||
namespace say {
|
||||
|
||||
using namespace std;
|
||||
|
||||
namespace {
|
||||
|
||||
const unordered_map<number_t, string> numbers_map = {
|
||||
{0, "zero"},
|
||||
{1, "one"},
|
||||
{2, "two"},
|
||||
{3, "three"},
|
||||
{4, "four"},
|
||||
{5, "five"},
|
||||
{6, "six"},
|
||||
{7, "seven"},
|
||||
{8, "eight"},
|
||||
{9, "nine"},
|
||||
{10, "ten"},
|
||||
{11, "eleven"},
|
||||
{12, "twelve"},
|
||||
{13, "thirteen"},
|
||||
{20, "twenty"},
|
||||
{30, "thirty"},
|
||||
{50, "fifty"},
|
||||
{80, "eighty"}
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
string in_english(number_t number)
|
||||
{
|
||||
if (number > 13 && number < 20)
|
||||
return numbers_map.at(number - 10) + "teen";
|
||||
|
||||
if (number >= 20 && number < 100 && (number % 10 == 0)) {
|
||||
|
||||
if (numbers_map.count(number))
|
||||
return numbers_map.at(number);
|
||||
|
||||
return numbers_map.at(number / 10) + "ty";
|
||||
}
|
||||
|
||||
if (number > 20 && number < 100) {
|
||||
|
||||
number_t ones = number % 10;
|
||||
number_t tens = number - ones;
|
||||
|
||||
return in_english(tens) + '-' + in_english(ones);
|
||||
}
|
||||
|
||||
if (number >= 100 && number < 1000) {
|
||||
|
||||
if (number % 100 == 0)
|
||||
return in_english(number / 100) + " hundred";
|
||||
|
||||
number_t rest = number % 100;
|
||||
number_t hundreds = number - rest;
|
||||
|
||||
return in_english(hundreds) + ' ' + in_english(rest);
|
||||
}
|
||||
|
||||
if (number >= 1000 && number < 1000000) {
|
||||
|
||||
cout << number << endl;
|
||||
|
||||
if (number % 1000 == 0)
|
||||
return in_english(number / 1000) + " thousand";
|
||||
|
||||
number_t rest = number % 1000;
|
||||
number_t thousands = number - rest;
|
||||
|
||||
return in_english(thousands) + ' ' + in_english(rest);
|
||||
}
|
||||
|
||||
return numbers_map.at(number);
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
13
cpp/say/say.h
Normal file
13
cpp/say/say.h
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
#pragma once
|
||||
|
||||
#define EXERCISM_RUN_ALL_TESTS
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace say {
|
||||
|
||||
typedef unsigned long long number_t;
|
||||
|
||||
std::string in_english(number_t number);
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue