Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/25: Рейтинг темы: голосов - 25, средняя оценка - 4.56
3 / 2 / 1
Регистрация: 02.04.2021
Сообщений: 35

Разбить запись числа, чтобы между каждыми тремя последовательными цифрами был пробел. Использовать циклы.

02.04.2021, 18:38. Показов 4937. Ответов 15
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Нужно вывести число, чтобы между каждыми тремя цифрами числа был пробел. Например вот так: 12 200 450.
Строгое условие: использовать только циклы, арифметические операции, условия и операции вывода, ни в коем случае не прибегать к строковым операциям и массивам!!!
Вот, что пока что имею, но это не работает естественно
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
        p = prompt("Введите число");
        if(p<1000)
        {
            document.write(p);
        }
        else{
            n=p%1000;
        for(i=n; i!=0; Math.floor(i)) break;
        {
            document.write(i);
        }
        }
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.04.2021, 18:38
Ответы с готовыми решениями:

Между цифрами 1,2,…9 вставьте знаки +,-,*,/ так, чтобы результат был равен 100
Помогите, пожалуйста написать программу, которая выводила бы последовательность из знаков так, чтобы 1 ? 2 ? 3 ? 4 ? 5 ? 6 ? 7 ? 8 ? 9 =...

Отредактировать текст так, чтобы между словами был ровно один пробел
Дан произвольный текст. Отредактировать его так,чтобы: а)между словами был ровно один пробел; б)предложения в тексте разделялись ровно...

Преобразовать строку так, чтобы между словами был ровно один пробел
Дана строка-предложение с избыточными пробелами между словами. Преобразовать ее так, чтобы между словами был ровно один...

15
Эксперт JS
 Аватар для DrType
6553 / 3624 / 1075
Регистрация: 07.09.2019
Сообщений: 5,877
Записей в блоге: 1
02.04.2021, 19:07
В любом случае оперировать придётся строками, а не числами.
Можно так как-нибудь:
JavaScript
1
2
3
4
5
6
7
8
9
function pattern(n) {
  let res = "";
  for (let i = 1; i <= n.length; i++) {
    const j = n.length - i;
    res = (!j || i % 3 ? n[j] : " " + n[j]) + res;
  }
  return res;
}
console.log(pattern(prompt("Введите число")));
1
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
02.04.2021, 19:17
DrType,
BAXYF показал прекрасный способ не использовать строки как части исходного числа:
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <script>
        // let n = 1234567892;
        let n  = +prompt("Введите целое число");
        let was = false;
        for (let i = 24; i >= 0; i -= 3) {
            let group = Math.trunc(n / (10 ** i));
            if (group > 0) {
                if (was) {
                    if (group < 100)
                        document.body.insertAdjacentText("beforeend", "00");
                    else if (group < 10)
                        document.body.insertAdjacentText("beforeend", "0");
                }
                else {
                    document.body.insertAdjacentText("beforeend", group)
                    if (!was) was = true;
                }
            }
            else if (was)
                document.body.insertAdjacentText("beforeend", "000");
                
            if (i >= 3)
                document.body.insertAdjacentText("beforeend", " ");
 
            n = n - group * (10 ** i);
        }
    </script>
</body>
</html>
2
3 / 2 / 1
Регистрация: 02.04.2021
Сообщений: 35
02.04.2021, 19:19  [ТС]
Это ведь массив в пятой строке, их по условию нельзя использовать, но для меня это не главное, мне важно понять алгоритм, можете добавить комментарии пожалуйста
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
02.04.2021, 19:22
...строковые операции в смысле.

Добавлено через 1 минуту
Цитата Сообщение от BAXYF Посмотреть сообщение
Это ведь массив в пятой строке
Там не массив, а набор строки строковыми операциями.
1
3 / 2 / 1
Регистрация: 02.04.2021
Сообщений: 35
02.04.2021, 19:25  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
document.body.insertAdjacentText
Спасибо, можете пояснить пожалуйста, в чем основная сила этого, а то я только documen.write и alert легко воспринимаю
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
02.04.2021, 19:27
BAXYF, documen.write устрашающе устарело. Надо срочно забыть его.
Поэтому добавляем строку на страницу любым современным способом.
0
3 / 2 / 1
Регистрация: 02.04.2021
Сообщений: 35
02.04.2021, 19:54  [ТС]
понял, с beforeend понял тоже, а какое назначение нулей на месте элемента?

Добавлено через 15 минут
Еще если не сложно, добавьте комментарии, а то я слегка подзапутался, еще я выполнил код и он только выводит первые три цифры числа
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
02.04.2021, 20:19
Цитата Сообщение от BAXYF Посмотреть сообщение
а какое назначение нулей на месте элемента?
Слово группа цифр по три понятно?

Если в каждой группе будет по одной цифре, как будете число записывать?
0
 Аватар для diadiavova
7258 / 2605 / 744
Регистрация: 11.04.2015
Сообщений: 4,148
Записей в блоге: 43
02.04.2021, 20:33
Цитата Сообщение от BAXYF Посмотреть сообщение
Строгое условие: использовать только циклы, арифметические операции, условия и операции вывода, ни в коем случае не прибегать к строковым операциям и массивам
Я не стал заморачиваться на операциях ввода-вывода, поэтому пришлось накапливать значение в строковой переменной с помощью конкатенации. Если это нарушает условие, то изменить это, как мне кажется, совсем несложно. Однако это, я думаю, наиболее простой алгоритм.
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        function triplet(n)
        {
            let result = "", d = 0;
            while (n > 0)
            {
                result = (++d % 3 == 0 && n > 9 ? " " : "") + n % 10 + result;
                n = Math.trunc(n / 10);
            }
            return result;
        }
 
        console.log(triplet(12345));
        console.log(triplet(123456));
        console.log(triplet(1234567));
0
3 / 2 / 1
Регистрация: 02.04.2021
Сообщений: 35
02.04.2021, 20:41  [ТС]
A, дошло))) спасибо
0
123 / 98 / 15
Регистрация: 02.02.2014
Сообщений: 346
02.04.2021, 22:56
Цитата Сообщение от amr-now Посмотреть сообщение
BAXYF показал прекрасный способ не использовать строки как части исходного числа:

Не по теме:

тут уже магия подъехала

0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.04.2021, 09:01
Лучший ответ Сообщение было отмечено BAXYF как решение

Решение

BAXYF, подправлю ошибку из сообщения №3.
Ненулевую группу из строки 20 надо было в любом случае добавлять. Без else.
Заодно можно применить немного более короткий способ добавления текста на страницу.
PHP/HTML
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
</head>
<body>
    <script>
        // let n = 1234007892;
        let n  = +prompt("Введите целое число");
        let was = false;
        for (let i = 24; i >= 0; i -= 3) {
            let group = Math.trunc(n / (10 ** i));
            if (group > 0) {
                if (was) {
                    if (group < 100)
                        document.body.append("00");
                    else if (group < 10)
                        document.body.append("0");
                }
                {
                    document.body.append(group);
                    if (!was) was = true;
                }
            }
            else if (was)
                document.body.append("000");
 
            if (i >= 3 && was)
                document.body.append(" ");
 
            n = n - group * (10 ** i);
        }
    </script>
</body>
</html>
В строке 28 тоже надо добавлять пробел, если число уже начало записываться на экран.
----
Строгое условие: использовать только циклы, арифметические операции, условия и операции вывода - соблюдено.
0
3 / 2 / 1
Регистрация: 02.04.2021
Сообщений: 35
03.04.2021, 11:14  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
for (let i = 24;
А почему в цикле задаете именно 24, я так понимаю, другое значение поменяет всё, но почему 24 не знаю
Цитата Сообщение от amr-now Посмотреть сообщение
n = n - group * (10 ** i);
еще эту строчку прокомментировать могли бы? если не сложно.
спаибо
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
03.04.2021, 11:36
BAXYF, отрезать 24 знака справа и взять то, что осталось слева. Предполагаем, что количество цифр достаточное для целого числа.

Есть способ посчитать количество цифр в числе делением на 10 в цикле. Тогда можно будет сразу сказать, сколько групп по три будет. Если хотите, можете подумать над решением. тоже полезно.

Добавлено через 2 минуты
Цитата Сообщение от BAXYF Посмотреть сообщение
еще эту строчку прокомментировать могли бы?
Удалить из n использованную группу цифр слева. Оставить то, что было справа.
0
3 / 2 / 1
Регистрация: 02.04.2021
Сообщений: 35
04.04.2021, 20:22  [ТС]
Цитата Сообщение от amr-now Посмотреть сообщение
BAXYF, отрезать 24 знака справа и взять то, что осталось слева. Предполагаем, что количество цифр достаточное для целого числа.
Есть способ посчитать количество цифр в числе делением на 10 в цикле. Тогда можно будет сразу сказать, сколько групп по три будет. Если хотите, можете подумать над решением. тоже полезно.
Благодарю, теперь во всем разобрался)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
04.04.2021, 20:22
Помогаю со студенческими работами здесь

Отредактировать текст так, чтобы между словами был ровно один пробел
помогите решить задачу. Дан произвольный текст.Отредактировать его так,чтобы: а)Между словами был ровно 1 пробел; б)предложения в...

Преобразовать строку так, чтобы между словами был ровно один пробел
Дана строка-предложение с избыточными пробелами между словами. Преобразовать ее так, чтобы между словами был ровно один пробел.

Преобразовать строку так, чтобы между словами был ровно один пробел
Дана строка-предложение с избыточными пробелами между словами. Преобразовать ее так, чтобы между словами был ровно один пробел. Помогите...

Отредактировать текст так, чтобы между словами был ровно один пробел
:wall:Люди, плз помогите с задачами : № 1. Даны две символьные строки, состоящие только из цифр (длина каждой - более 10 символов)....

Преобразовать строку так, чтобы между словами был ровно один пробел
При реализации программы необходимо использовать функции обработки строк из библиотек stdlib.h и string.h Дана строка-предложение с...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru