Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.98/49: Рейтинг темы: голосов - 49, средняя оценка - 4.98
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
1

Выведите в выходной файл округленное до n знаков после десятичной точки число E

05.08.2013, 11:17. Показов 8908. Ответов 53
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Как пишутся очень короткие программы на C++ или C (менее 150 символов, не считая пробелов и табуляций)?
Например, задача
Выведите в выходной файл округленное до n знаков после десятичной точки число E. Число Е, округленное до 25 знаков после десятичной точки, равно 2.7182818284590452353602875.

Входные данные

Входной файл INPUT.TXT содержит целое число n (0 ≤ n ≤ 25).

Выходные данные

В выходной файл OUTPUT.TXT выведите ответ на задачу.
Вот мое решение на 255 символов:
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <fstream>,<string>
 
int main()
{
    std::string e = "2.71828182845904523536028750";
    std::ifstream f ("input.txt");
    std::ofstream o("output.txt");
    int a,i;
    
    f >> a;
    if (a==0) 
            o << 3;
         else
        {
            if (e[a+2] > 52) e[a+1]++;
            for (i=0; i <= a+1 ;++i)
                o<<e[i];
        }   
    
    return 0;
}
Некоторым удается написать решения на 130, 156, 171 символов. Как это у них получается?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.08.2013, 11:17
Ответы с готовыми решениями:

Вывести в выходной файл округленное до n знаков после десятичной точки число E
Выведите в выходной файл округленное до n знаков после десятичной точки число E. Число Е,...

Округлить число до 25 знаков после десятичной точки
Есть простая задача: вот я ее решаю таким способом, т.к в задании написано округлить ...

Вывести в файл число с заданным количеством знаков после точки
Как это сделать, нигде не нашёл.(

Округление числа до n знаков после десятичной точки
Решил задачу для новичков по C++. Задача совсем для зелёных новичков, кто только-только начал...

53
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.08.2013, 10:46 41
Author24 — интернет-сервис помощи студентам
Цитата Сообщение от Bohes_ Посмотреть сообщение
Time limit exceeded
acmp вчера сильно глючил, там один проверяющий сервер (медленный) стабильно выдавал WA\TLE\RE\ETC.
Решалось одновременной посылкой 3-4 исходников.

Цитата Сообщение от Somebody Посмотреть сообщение
Можно использовать функцию system.
О, видимо вайтспейсы все-таки разбанили... Ну или их вообще не банили >_<
У меня на 130 символов тоже вайтспейсы, но только там все делается в лоб (без system).
А, если не секрет, какой язык использовался в system?

P.S. в дом-школа-дом обновил рекорд до 113 символов. А именно, сократил эту строку
C++
1
o << (*s & ~x & 1 ? "No" : "Yes");
на 1 символ + 1 сэкономил один символ на студийной особенности.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
07.08.2013, 10:53 42
Цитата Сообщение от Bohes_ Посмотреть сообщение
1)Как не странно, но табуляции иногда считаются
Да, я заметил. Но если хорошо подумать, то есть ещё другой символ, который не считается.
Цитата Сообщение от Bohes_ Посмотреть сообщение
2) А смысл писать файл в 16Кб? Все равно с 16к символами в рейтинг не пролезешь...
Я думал, это уже понятно: в решении несколько тысяч пробелов. Но если будет больше 16k, то они все посчитаются в размере.
Цитата Сообщение от Bohes_ Посмотреть сообщение
3)В system есть значение экспоненты?
В смысле можно ли какой-то командой получить экспоненту? Наверное, нет.

Добавлено через 2 минуты
Цитата Сообщение от diagon Посмотреть сообщение
О, видимо вайтспейсы все-таки разбанили... Ну или их вообще не банили >_<
Не, даже табуляция в строке считается. Но всё-таки там не учли одну возможность, которую можно эксплойтить.
Цитата Сообщение от diagon Посмотреть сообщение
А, если не секрет, какой язык использовался в system?
Пишется и выполняется bat файл. (Без промежуточного bat'а не получилось.)
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
07.08.2013, 11:21 43
Цитата Сообщение от Somebody Посмотреть сообщение
Не, даже табуляция в строке считается.
Все-таки считается? Вроде ж нет...
При подсчете размера кода не учитываются пробелы, а так же символы переноса и табуляции.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
07.08.2013, 11:27 44
Внутри закавыченной строки точно считается, в остальных местах - не проверял.
0
1405 / 647 / 135
Регистрация: 11.08.2011
Сообщений: 2,299
Записей в блоге: 2
07.08.2013, 11:44 45
Somebody, внутри закавыченной строки не считаются же пробелы.
0
5 / 5 / 0
Регистрация: 18.06.2013
Сообщений: 51
07.08.2013, 13:24  [ТС] 46
Вот пример исходника, где табуляция считается:
Вложения
Тип файла: zip t68m.zip (249 байт, 24 просмотров)
0
3 / 3 / 3
Регистрация: 06.08.2013
Сообщений: 23
09.08.2013, 01:13 47
Ребята, читал книгу Лафоре, главу про функции. Он там пишет, что можно при объявлении функции не указывать тип возвращаемого значения и тогда по умолчанию тип будет int!
Т.е. вместо
C++
1
2
3
4
int main()
{
    ...
}
Можно спокойно писать:
C++
1
2
3
4
main()
{
    ...
}
Быть может, кто-то уже писал в этой теме об этом. В таком случае, приношу свои извинения.
0
1394 / 1023 / 325
Регистрация: 28.07.2012
Сообщений: 2,813
09.08.2013, 09:30 48
Цитата Сообщение от ching0n Посмотреть сообщение
Можно спокойно писать
Где-то можно, а где-то нельзя. Все зависит от компилятора. Например VS2012 не позволяет упускать тип возвращаемого значения.
И так как ТС постоянно изменял конечный код, добавляя тип, то и компилятор на проверяющем серве тоже не позволяет.
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
20.08.2013, 17:00 49
Если бы табуляция не считалась, то можно было бы упаковать что угодно (практически неограниченное количество информации) в сотню символов. То есть берём любой исполняемый файл, перекодируем его заменяя все биты равные 0 пробелом, а биты равные 1 - табуляцией. Останется только написать распаковщик.

Добавлено через 1 минуту
Видимо кто-то очень умный просёк это и админ оперативно закрыл брешь.
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
20.08.2013, 17:08 50
Ладно, подсказываю дальше. Возврат каретки всё ещё не считается в количестве символов, но при этом их компилятор нормально его переваривает внутри строки. И это вряд ли пофиксят, потому что тут надо парсить исходник с учётом всех правил написания строк и комментариев в конкретном языке.
Цитата Сообщение от murderer Посмотреть сообщение
То есть берём любой исполняемый файл, перекодируем его заменяя все биты равные 0 пробелом, а биты равные 1 - табуляцией. Останется только написать распаковщик.
Так я и сделал, но вот облом: эта версия компилятора не переваривает строковые литералы больше примерно 2048 символов, так что кроме кода распаковки пришлось максимально уменьшать и кодируемый файл.
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
20.08.2013, 17:20 51
Возврат каретки всё ещё не считается в количестве символов, но при этом их компилятор нормально его переваривает внутри строки.
Я на Delphi пишу - он не переваривает

не переваривает строковые литерал больше примерно 2048 символов
на Delphi ограничение 255, но можно невозбранно делать так
Код
a='                                 '+
  '                                 '+
  ...
  '                                 ';
Хотя при этом появляется куча лишних кавычек

Добавлено через 6 минут
Я ещё так пытался делать: пишу всё решение асм-вставкой, затем компилирую и вставляю так
Assembler
1
db 'код в виде многа букав'
У меня такое компилируется и работает, а у них гарантирован TLE. Приходится вставлять 16-ричными кодами, что как минимум в 2 раза больше.
0
Higher
1953 / 1219 / 120
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
20.08.2013, 17:21 52
Цитата Сообщение от Somebody Посмотреть сообщение
переваривает строковые литералы больше примерно 2048 символов
за 2 символа можно увеличить этот предел вдвое
C++
1
"тут 2048 символов...""и тут тоже 2048..."
0
2835 / 1644 / 254
Регистрация: 03.12.2007
Сообщений: 4,222
20.08.2013, 17:45 53
Цитата Сообщение от murderer Посмотреть сообщение
Я ещё так пытался делать: пишу всё решение асм-вставкой, затем компилирую и вставляю так
Код базонезависимый был? Я как-то давно пытался сделать примерно так. Насколько помню, в простом случае работало, но поиск функций в kernel32 не прокатил (у себя на компе работало нормально). Но вообще, мне кажется, если аккуратно всё сделать, то может получиться. В конце концов, можно вытащить адрес функций в их системе и статически забить в код.
Цитата Сообщение от diagon Посмотреть сообщение
за 2 символа можно увеличить этот предел вдвое
Это я понял, но так размер быстро растёт. Мой метод кодировки использует намного больше 8 байт на один кодируемый, зато декодер меньше.
0
4165 / 1817 / 216
Регистрация: 06.10.2010
Сообщений: 4,074
20.08.2013, 18:39 54
Код базонезависимый был?
Как раз таки нет - наоборот заточенный под конкретный компилятор. Например код к задаче "Разные цифры" выглядит примерно так
Delphi
1
2
3
4
5
6
repeat
  asm
  dq <опкоды>
  end;
  write(x:3)
until x=36
Внутри асм-вставки расположен условный переход, поэтому write вызывается только при определённом условии. Кроме того компилятор заменяет переменную x регистром и это очень облегчает задачу.

P.S. этот код сейчас на первом месте в топе

Добавлено через 12 минут
Ещё пытался находить в адресном пространстве пустоты и использовать их как буффер для результирующей строки, но кажется это не очень помогло.

Добавлено через 5 минут
А вот - нашёл
Кликните здесь для просмотра всего текста
Delphi
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
var
  s: Pchar;
  a: word;
begin
  reset(input,'INPUT.TXT');
  read(a);
  asm
  std
  inc edx
  mov ebx,eax
  mov ah,2
  @1:mov ecx,edx
     mov esi,406000h
     mov edi,esi
     @2:lodsb
        add al,al
        add al,ah
        aam
        stosb
     loop @2
     xadd  [edi],ah
     setnz al
     add   edx,eax
     dec   ebx
  jnz @1
  mov ebx,406001h
  @3:dec ebx
     add byte[ebx],30h
     dec edx
  jnz @3
  end;
  rewrite(output,'OUTPUT.TXT');
  write(s)
end.

И финальный вариант
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
var
  s: Pchar;
  a: word;
begin
  reset(input,'INPUT.TXT');
  read(a);
  asm
  dq$D18902B4C38942FD,$ACF78900406000BE,$E2AA0AD4E000C000,$01C0950F27C00FF6,$406001BBE2754BC2,$F9754A3003804B00
  end;
  rewrite(output,'OUTPUT.TXT');
  write(s)
end.
0
20.08.2013, 18:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.08.2013, 18:39
Помогаю со студенческими работами здесь

Выведите первую цифру числа после десятичной точки
Дано положительное действительное число X. Выведите его первую цифру после десятичной точки. ...

Вычислить функцию с точностью 6 знаков после десятичной точки
)Вычислить функцию f(x,a)= при x=0.4, 0.6,..., 1.2 и a=2, 3, 4, 5 с точностью 6 знаков после...

Дано вещественное число, проверить является ли это число симметричным относительно положения точки до двух знаков после запятой.
Только начинаю программировать на с/с++ и столкнулась с логическими выражениями, простейшие задачи...

Найдите такое число x, что x^2+√x=C , с точностью не менее 6 знаков после точки
Найдите такое число x, что x^2+√x=C , с точностью не менее 6 знаков после точки. Я думал, что это...


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

Или воспользуйтесь поиском по форуму:
54
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru