SPOJ ADDREV Неправильный ответ - PullRequest
1 голос
/ 28 августа 2009

Я пытаюсь решить проблему Добавление перевернутых чисел (ADDREV) в Sphere Online Judge, но мое представление продолжает давать неправильный ответ.

Я пробовал int, unsigned int, long и unsigned long для моих переменных, и все они одинаково хорошо работают на моем компьютере с некоторыми тестовыми данными (также ниже), но все они не работают с SPOJ.

Я надеюсь, что кто-то сможет пролить свет на то, почему моя программа не работает в их системе. Я также оставил сообщение на их форуме, но там, похоже, не так много трафика.

Вот мой код:

#include <stdio.h>

#define FIRST 1
#define SECOND 2

int main()
{
    int c, k, x, y, state, place, total, reverse = 0;

    do 
    {
        c = getchar();

        if (c  < 48 || c > 57)
        {
            continue;
        }
        else
        {
            k = k * 10;

            k = k + (c - 48);
        }

    } while (c != '\n');

    state = FIRST;

    place = 1;  

    do 
    {
        c = getchar();

        if (c == ' ')
        {
            state = SECOND;

            place = 1;

            continue;
        }
        else if (c == '\n')
        {
            total = x + y;

            place = 1;

            while ((total / place) >= 10)
            {
                place = place * 10;
            }

            while (place > 0)
            {
                reverse = reverse + ((total % 10) * place);

                total = total / 10;

                place = place / 10;
            }

            printf("%d\n", reverse);

            state = FIRST;

            place = 1;

            reverse = 0;

            x = 0;

            y = 0;

            k--;

            continue;
        }

        if (state == FIRST && (c  >= 48 && c <= 57))
        {
            x = x + ( (c - 48) * place );

            place = place * 10;

        }
        else if (state == SECOND && (c  >= 48 && c <= 57)) 
        {
            y = y + ((c - 48) * place );

            place = place * 10;
        }

    } while (k > 0);

    return 0;
}

И ... вот данные теста, которые я использую:

12 
24 1                   
4358 754  
305 794
2762 2563
435 4320
0 0
123 456 
20 20 
10000 10000
999999 999999 
321 583 
9999999 999999

А вот результаты, которые моя программа выдает на моем компьютере:

34
1998
1
4236
867
0
579
4
2
8999991
805
89999901

Любая помощь будет оценена :)

1 Ответ

2 голосов
/ 28 августа 2009

На данный момент:

int c, k, x, y, state, place, total, reverse = 0;

вы создаете переменную k, но не даете ей значения. Вскоре после:

k = k * 10;

вы используете эту переменную. В этот момент ваша программа демонстрирует неопределенное поведение - может произойти что угодно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...