Показать сообщение отдельно
  #6 (permalink)  
Старый 19.05.2023, 23:40
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,068

WebMachine,
при желании, код можно оптимизировать...
<body>
    <meta charset="utf-8">
    <script>
        const numb900 = [100, 200, 300, 400, 500, 600, 700, 800, 900];
        const numb90 = [10, 20, 30, 40, 50, 60, 70, 80, 90];
        const numb9 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
        const numb19 = [11, 12, 13, 14, 15, 16, 17, 18, 19];
        const string900 = ['сто', 'двести', 'триста', 'четыреста', 'пятьсот', 'шестьсот', 'семьсот', 'восемьсот', 'девятьсот'];
        const string90 = ['десять', 'двадцать', 'тридцать', 'сорок', 'пятьдесят', 'шестьдесят', 'семьдесят', 'восемьдесят', 'девяносто'];
        const string9 = ['один', 'два', 'три', 'четыре', 'пять', 'шесть', 'семь', 'восемь', 'девять'];
        const string19 = ['одиннацать', 'двенадцать', 'тринадцать', 'четырнадцать', 'пятнадцать', 'шестнадцать', 'семнадцать', 'восемнадцать', 'девятнадцать'];

        function transformation(number) {
            if (number > 999) return '&infin;';
            let str = '';
            let num = number % 100;
            let i = numb19.findIndex(a => a == num);
            if (i !== -1) {
                number -= num;
                str = string19[i];
                i = numb900.findIndex(a => a == number);
                return i !== -1 ? `${string900[i]} ${str}` : str;
            } else {
                let num = number % 10;
                let i = numb9.findIndex(a => a == num);
                if (i !== -1) {
                    number -= num;
                    str = string9[i];
                    if (!number) return str;
                    num = number % 100;
                    i = numb90.findIndex(a => a == num);
                    if (i !== -1) {
                        number -= num;
                        str = `${string90[i]} ${str}`;
                        if (!number) return str;
                        i = numb900.findIndex(a => a == number);
                        return `${string900[i]} ${str}`
                    }
                    i = numb900.findIndex(a => a == number);
                    return `${string900[i]} ${str}`
                } else {
                    let num = number % 100;
                    let i = numb90.findIndex(a => a == num);
                    if (i !== -1) str = string90[i];
                    number -= num;
                    if (!number) return str;
                    i = numb900.findIndex(a => a == number);
                    return `${string900[i]} ${str}`;
                }
            }
        }
        for (let i = 1; i < 1000; i++) document.write(`${i} ${transformation(i)} <br>`)
    </script>
</body>
Ответить с цитированием