Всем привет! Недавно начал изучать си, заглянул на acm.timus.ru и взял задачу «обраьный корень». Она звучит так: Исходные данные Входной поток содержит набор целых чисел Ai (0 ≤ Ai ≤ 10^18), отделённых друг от друга произвольным количеством пробелов и переводов строк. Размер входного потока не превышает 256 КБ. Результат Для каждого числа Ai, начиная с последнего и заканчивая первым, в отдельной строке вывести его квадратный корень не менее чем с четырьмя знаками после десятичной точки.
короч, я понимаю, что в общем мое решение совсем не оптимум, но если запускаю с тестовыми входными данными все работает у меня на компе, а когда отправляю решение - пишет что wrong answer. Нашел в интернете чужое решение, отправил - все работает(((( Не пойму в чем ошибка(((
Вот мой код:
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#define MAXCHAR 18
#define MAXROOTS 1000000
#define IN 1
#define OUT 0
void clean_buf(char buf[], int length);   //очищать буфер чисел
void print_reverse(double arr[], int length); //вывести в выходной поток обратный массив корней
int main()
{
    int state, counter, digit_counter=0;
    state = OUT;//состояние - находимся ли мы внутри числа или нет
    char numbers[MAXCHAR];
    double roots[MAXROOTS];
    char tmp;
    while ((tmp = getchar()) != EOF) //читаем символы из входного потока
        {
            if ((tmp == ' ' || tmp == '\n')) {  // если символ пробел или переход строки
                    if (state == IN) { //и к тому же мы только что вышли из слова
                        double num;
                        sscanf(numbers, "%lf",&num); //записать текущий буфер в число
                        roots[counter]=sqrt(num); //и найти его корень
                        counter++;
                        state = OUT;
                        clean_buf(numbers, MAXCHAR);
                        digit_counter = 0;
                    }
            }
            else
                    {
                        numbers[digit_counter] = tmp;
                        state = IN;
                        digit_counter++;
                    }
        }
        print_reverse(roots, counter-1);
        return 0;
}
void clean_buf(char buf[], int length)
{
    int i;
    for (i = 0; i < length; ++i)
        buf[i] = ' ';
}
void print_reverse(double arr[], int length)
{
    while (length >= 0)
    {
        printf("%.4lf\n", arr[length]);
        length--;
    }
}
А вот найденный на просторах интернета:
#include <math.h>
#include <stdio.h>
int top = -1;
double stack[131072];
int main()
{
  while(scanf("%lf", &stack[++top]) != EOF );
  for( ; top > 0; printf( "%.4f\n", sqrt( stack[--top] ) ) );
  return 0;
}






