Блог пользователя Misha100896

Автор Misha100896, 12 лет назад, По-русски

Добрый день, уважаемое сообщество codeforces. Буквально пару недель назад я начал изучать с++, т.к. в этом году закончил школу. До этого я знал исключительно pascal и на всех олимпиадах кодил только на нем.
Но при решении этой задачи я столкнулся с одной проблемой. Код на pascal получает Accepted, а на c++ Wrong Answer.
Код на pascal: тут
Код на с++: тут
И теперь я прошу тех, кто знает в чем причина Wrong Answer, рассказать её и как бороться с этой проблемой. Буду очень признателен!

  • Проголосовать: нравится
  • 0
  • Проголосовать: не нравится

»
12 лет назад, скрыть # |
 
Проголосовать: нравится +19 Проголосовать: не нравится
#include <iostream>

int main() {
        double test = 1.23456789;
        std::cout << test << std::endl;
        return 0;
}
  • »
    »
    12 лет назад, скрыть # ^ |
     
    Проголосовать: нравится 0 Проголосовать: не нравится

    Спасибо, понял. А как тогда сделать, чтобы вывод был с более большей точностью?

    • »
      »
      »
      12 лет назад, скрыть # ^ |
      ← Rev. 2  
      Проголосовать: нравится 0 Проголосовать: не нравится
      cout.precision(x);
      cout<<fixed<<a<<" "<<b;
      

      Где x -- количество знаков после запятой, а a и b то, что мы выводим.

    • »
      »
      »
      12 лет назад, скрыть # ^ |
       
      Проголосовать: нравится 0 Проголосовать: не нравится

      printf("%.Xlf", ans); X — число знаков после запятой

      • »
        »
        »
        »
        12 лет назад, скрыть # ^ |
         
        Проголосовать: нравится -39 Проголосовать: не нравится

        При выводе %f по стандарту достаточно. Мне уже надоело это повторять.

        • »
          »
          »
          »
          »
          12 лет назад, скрыть # ^ |
           
          Проголосовать: нравится 0 Проголосовать: не нравится

          Почему ты так рейджишь? %lf не работает, что ли?

          • »
            »
            »
            »
            »
            »
            12 лет назад, скрыть # ^ |
             
            Проголосовать: нравится 0 Проголосовать: не нравится

            Просто люди, наученные подобными советами (и не читавшие книги по C/C++), потом пытаются доказывать, что выводить double через %f — неправильно.

            • »
              »
              »
              »
              »
              »
              »
              12 лет назад, скрыть # ^ |
              ← Rev. 3  
              Проголосовать: нравится +23 Проголосовать: не нравится

              Конечно, неправильно писать %f для double.
              Потому что те, кого научишь, что это правильно, начинают писать и так

              double a;
              scanf("%f",&a);

              А это уже просто совсем неправильно.

              В printf (и др.) происходит неявное преобразование float-double, но это просто для совместимости с очень старым С.
              UPD. Не в самой printf, естественно, а при передаче параметров в printf. Ну а сама printf уже воспринимает %f и %lf одинаково.

              • »
                »
                »
                »
                »
                »
                »
                »
                12 лет назад, скрыть # ^ |
                 
                Проголосовать: нравится 0 Проголосовать: не нравится

                Конечно, неправильно писать %f для double. Потому что те, кого научишь, что это правильно, начинают писать и так

                double a;
                scanf("%f",&a);

                А это уже просто совсем неправильно.

                В printf (и др.) происходит неявное преобразование float-double, но это просто для совместимости с очень старым С. UPD. Не в самой printf, естественно, а при передаче параметров в printf. Ну а сама printf уже воспринимает %f и %lf одинаково.

                Не знаю, меня книга Кернигана и Ритчи научила писать %f для вывода double и %lf — для ввода. Про преобразования аргументов vararg-функций я прочитал там же.

                Ретируюсь из дискуссии.

»
12 лет назад, скрыть # |
← Rev. 2  
Проголосовать: нравится +1 Проголосовать: не нравится

Написал бред