ENG  RUSTimus Online Judge
Online Judge
Задачи
Авторы
Соревнования
О системе
Часто задаваемые вопросы
Новости сайта
Форум
Ссылки
Архив задач
Отправить на проверку
Состояние проверки
Руководство
Регистрация
Исправить данные
Рейтинг авторов
Текущее соревнование
Расписание
Прошедшие соревнования
Правила
вернуться в форум

Обсуждение задачи 1001. Обратный корень

why am i wrong? on c++
Послано Cui Xiangfei 2 ноя 2013 14:04
#include <iostream>
#include <vector>
#include <math.h>
#include <stdio.h>
using namespace std;
int main()
{
    vector<int> v;
    int value;
    while(true)
    {
        cin >> value;
        if(cin.eof())
        {
            break;
        }
        else if(cin.fail())
        {
            cin.clear();    // 清空错误状态
            cin.ignore();   // 忽略掉下一个字符
            continue;
        }
        else if(value >= 0)
        {
            v.push_back(value);
        }
    }
    cout << fixed;
    cout.precision(4);
    for(vector<int>::reverse_iterator iter = v.rbegin(); iter != v.rend(); ++iter)
    {
        if(*iter == 0)
            cout << (double)0 << endl;
        else
            cout << sqrt(*iter) << endl;
    }
    return 0;
}
Re: why am i wrong? on c++
Послано cures 18 май 2014 10:02
Do not break on cin.eof(), it may be set even if a good value is read (in case the last line is not terminated by newline, I guess). Or maybe they terminate data by non-numeric symbols? Nobody would say :)
Break on if (!cin), do not clear cin.
And why do you check for (*iter==0)? It works fine as in general case.