Всем привет! Недавно начал изучать си, заглянул на 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;
}