Форум программистов, компьютерный форум CyberForum.ru

Задача 1001 acm.timus.ru - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 17, средняя оценка - 4.82
MsHassium
2 / 2 / 0
Регистрация: 04.03.2012
Сообщений: 21
21.03.2012, 18:04     Задача 1001 acm.timus.ru #1
Исходные данные
Входной поток содержит набор целых чисел Ai (0 ≤ Ai ≤ 1018), отделённых друг от друга произвольным количеством пробелов и переводов строк. Размер входного потока не превышает 256 КБ.
Результат
Для каждого числа Ai, начиная с последнего и заканчивая первым, в отдельной строке вывести его квадратный корень не менее чем с четырьмя знаками после десятичной точки.
НЕ могу сообразить как сделать ввод данных!!! Делаю через цикл for,без массивов, но там нужно вводить кол-во элементов, а это по условию не приемлемо. Ступор!!!
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <iostream>
#include <cmath>
#include <iomanip>
using namespace std;
int main()
{
    
    double a;
    int n;
    cin>>n;
    for(int i=0;i<n;i++)
    {
        cin>>a;
        a=sqrt((double)a);
 
        cout<<fixed<<setprecision(4)<<a<<endl;
    }
    return 0;
}
здесь он считает корень, но выдает не в обратном порядке!!! В этом тоже не большая проблема!!!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
21.03.2012, 20:10     Задача 1001 acm.timus.ru #2
C++
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
36
37
38
39
40
41
#include "math.h"
#include <stdio.h>
int main()
{
#ifndef ONLINE_JUDGE
   freopen("input.txt", "rt", stdin);
   freopen("output.txt", "wt", stdout);
#endif
    double *mas=new double[132000];
    long long temp=0;
    int fl=0;
    int i_mas=0;
    char c;
    while ((int)(c = (char)getchar()) != EOF)
    {
        if((c==' ' || c=='\n') && fl==1)
        {
            fl=0;
            mas[i_mas++]=sqrt((double)temp);
            temp=0;
        }
        else
        {
            if(!(c==' ' || c=='\n'))
            {
                fl=1;
                temp*=(long long)10;
                temp+=(long long)(c-'0');
            }
        }
    }
if(fl)
{           
mas[i_mas++]=sqrt((double)temp);
}
    while(i_mas>0)
    {
        printf("%.5lf\n", mas[(i_mas--)-1]);
    }   
   return 0;
}
Nexia
0 / 0 / 0
Регистрация: 06.06.2013
Сообщений: 8
08.07.2013, 22:42     Задача 1001 acm.timus.ru #3
Друзья, огромная просьба разжевать данную строку подробнейшим образом. Я - начинающий, пытаюсь вкурить построчно, но тут что-то через чур многовато - не понятно что и гуглить )
Цитата Сообщение от valeriikozlov Посмотреть сообщение
while ((int)(c = (char)getchar()) != EOF)
lowercase
 Аватар для lowercase
211 / 200 / 34
Регистрация: 09.05.2012
Сообщений: 494
08.07.2013, 23:20     Задача 1001 acm.timus.ru #4
думаю обьяснять что такое while ненадо.

C++
1
c = (char)getchar()
так как переменная с - тип char, a getchar() - int - преобразовываем значение последнего к типу первого
C++
1
(int)(c = (char)getchar()) != EOF
т.к. EOF это #define EOF -1, все целочисельные литералы по умолчанию имеют тип int. а с - тип char потому приводим его к более широкому типу - int с помощью преобразования.

зы: операция (<имя_типа>)<выражение> называется приведеним типа. вроде как осталась в наследство от языка Си, в плюсах же вроде как юзают эти ваши static_cast<>(), dinamic_cast<>() и многое другое.

Добавлено через 15 минут
будь переменная с типа int, выше упомянутая строчка выглядела бы вот так:
C++
1
while ((c = getchar()) != EOF)
Yandex
Объявления
08.07.2013, 23:20     Задача 1001 acm.timus.ru
Ответ Создать тему
Опции темы

Текущее время: 07:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru