SPOJ ADDREV错误答案

时间:2009-08-28 19:22:46

标签: c

我正在尝试解决Sphere Online Judge的Adding Reversed Numbers问题(ADDREV),但我的提交仍然出现错误答案。

我已经为我的变量尝试了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 个答案:

答案 0 :(得分:2)

此时:

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

你创建一个变量k,但没有给它任何值。不久之后:

k = k * 10;

你使用这个变量。此时,您的程序会出现未定义的行为 - 可能发生任何事情。