C/C++

Написать программу на С++

Создание и применение вектора.
В английском языке числительные строятся примерно как в русском — числа до двадцати имеют самостоятельные имена: 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, 14 — fourteen, 15 — fifteen, 16 — sixteen, 17 — seventeen, 18 — eighteen, 19 — nineteen.
В числах от 20 до 99 десятки и единицы записываются через дефис. Например: 24 — twenty-four, 48 — forty-eight. Десятки называются так: 20 — twenty, 30 — thirty, 40 — fourty, 50 — fifty, 60 — sixty, 70 — seventy, 80 — eighty, 90 — ninety.
Напишите программу для превращения чисел в текст на английском языке. Пока что достаточно ограничиться двузначными числами.
Все английские слова даны в заготовке кода.
Формат входных данных
Одно целое число в пределах от 0 до 99.
Формат выходных данных
Английское наименование числа и endl.
Ограничения
Допустимые числа — от 0 до 99
Пример
Ввод: 5. Вывод: five
Ввод: 22. Вывод: twenty-two
Ввод: 0. Вывод: zero
Ввод: 80. Вывод: eighty
Ввод: 11. Вывод: eleven
Ввод: 99. Вывод: ninety-nine

Используйте векторы, которые даны в заготовке кода.
Используйте if, чтобы разобрать три случая:
число меньше 20;
число от 20, но количество единиц равно нулю;
остальные числа.

int main() {
vector<string> tens_names = {"twenty"s, "thirty"s, "fourty"s, "fifty"s,
"sixty"s, "seventy"s, "eighty"s, "ninety"s};

vector<string> num_names = { "zero"s, "one"s, "two"s, "three"s, "four"s, "five"s,
"six"s, "seven"s, "eight"s, "nine"s, "ten"s, "eleven"s,
"twelve"s, "thirteen"s, "fourteen"s, "fifteen"s,
"sixteen"s, "seventeen"s, "eighteen"s, "nineteen"s};
int number;
cin >> number;

// Вычислим единицы и десятки как остаток и частное:
int units = number % 10;
int tens = number / 10;

// Выведите число, используя векторы, которые даны выше.
// Если число меньше 20, то выведите элемент из num_names.
// Иначе, если единицы равны нулю, то выведите элемент tenth_names.
// Иначе выведите через дефис значения из tenth_names и num_names.
#include
#include
#include
using namespace std;

int main()

{
vector tens_names = { "twenty"s, "thirty"s, "fourty"s, "fifty"s,
"sixty"s, "seventy"s, "eighty"s, "ninety"s };

vector num_names = { "zero"s, "one"s, "two"s, "three"s, "four"s, "five"s,
"six"s, "seven"s, "eight"s, "nine"s, "ten"s, "eleven"s,
"twelve"s, "thirteen"s, "fourteen"s, "fifteen"s,
"sixteen"s, "seventeen"s, "eighteen"s, "nineteen"s };

int number;
cin >> number;

// Вычислим единицы и десятки как остаток и частное:
int units = number % 10;
int tens = number / 10;

// Если число меньше 20, то выведите элемент из num_names.

if (number < 20) cout << num_names[number];

// Иначе, если единицы равны нулю, то выведите элемент tens_names.

else

{

if (units == 0) cout << tens_names[tens - 2]; // tens - 2, так как названия в массиве начинаются с 20, то есть нулевой элемент - 20, первый - 30 и тд

// Иначе выведите через дефис значения из tenth_names и num_names.

else cout << tens_names[tens - 2] << "-" << num_names[units];

}

}
Rustam Ddd
Rustam Ddd
232
Лучший ответ
#include <iostream>
#include <string>
#include <limits>
#include <cstdlib>
using namespace std;
unsigned integer(const char* msg, istream& inp = cin) {
cout << msg;
unsigned value;
inp >> value;
inp.ignore(numeric_limits<streamsize>::max(), '\n');
return value;
}
class Numeral {
public:
string parse(unsigned number)const {
if (number < 20) {
if (number < 13) return a[number];
else return a[number] + "teen";
} else if (number < 100) {
auto x = number / 10;
auto y = number % 10;
auto s = b[x] + "ty";
if (!y) return s;
else return s + "-" + a[y];
} else {
return "error";
}
}
private:
inline static const string a[]{
"zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine",
"ten", "eleven", "twelve", "thir", "four", "fif", "six", "seven", "eigh", "nine"
};
inline static const string b[]{
"", "", "twen", "thir", "four", "fif", "six", "seven", "eigh", "nine"
};
};
int main() {
auto number = 0U;
Numeral numeral;
while (number < 100U) {
cout << ">>> ";
cin >> number;
cout << "<<< " << numeral.parse(number) << '\n';
}
system("pause");
}
Иван Уйманов
Иван Уйманов
96 543
cout << (number < 20? num_names[number] : number % 10? tens_names[number / 10-2] + "-" + num_names[number % 10] : tens_names[number / 10-2]);
   Вот так так! Весь алгоритм указан в комментариях!

   Не указано, что для чисел меньше 20 значение переменной number используется в качестве индекса элемента в массиве num_names.

cout << num_names[number];

  А для чисел от 20 и больше можно сначала в обязательном порядке вывести числительное для целого десятка, условный оператор здесь не требуется!

cout << tens_names[number/10 - 2];

   А вот после вывода целого десятка можно проверить, требуется ли выводить единицы. Если в единицах не ноль, то дополнительно вывести дефис и числительное единиц.

cout << '-' << num_names[number%10];

   Ну и не забудьте отдельно вывести манипулятор endl
#include <iostream>
#include <string>
#include <vector>

using namespace std;

int main() {
vector<string> tens_names = {"twenty"s, "thirty"s, "fourty"s, "fifty"s,
"sixty"s, "seventy"s, "eighty"s, "ninety"s};

vector<string> num_names = { "zero"s, "one"s, "two"s, "three"s, "four"s, "five"s,
"six"s, "seven"s, "eight"s, "nine"s, "ten"s, "eleven"s,
"twelve"s, "thirteen"s, "fourteen"s, "fifteen"s,
"sixteen"s, "seventeen"s, "eighteen"s, "nineteen"s};
int number;
cin >> number;

// Вычислим единицы и десятки как остаток и частное:
int units = number % 10;
int tens = number / 10;
if (number < 20){
cout<<num_names[number]<<endl;
}else if(number>=20 && units ==0) {
cout<<tens_names[tens -2]<<endl;
}else{
cout<<tens_names[tens -2] << "-" << num_names[units]<<endl;
}
}
MM
Muslim Muslim
271