Создание и применение вектора.
В английском языке числительные строятся примерно как в русском — числа до двадцати имеют самостоятельные имена: 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.
C/C++
Написать программу на С++
#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];
}
}
#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];
}
}
#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");
}
#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");
}
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
Не указано, что для чисел меньше 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;
}
}
#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;
}
}
Похожие вопросы
- Написать программу на языке Си
- Написать программы на СИ
- Некорректно работает написанная программа
- Помогите написать программу на С++
- Написать программу в С++ (нахождение площади трапеции)
- В LINUX OS Написать программу, которая из командной строки получает целое число N и некоторый текст “Text”.
- Помогите написать программу на С
- Помогите написать программу на C++
- Помогите написать программу на с++
- Помогите написать программу на с++