【问题标题】:SPOJ ADDREV Wrong AnswerSPOJ ADDREV 错误答案
【发布时间】:2009-08-28 19:22:46
【问题描述】:

我正在尝试解决 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

任何帮助将不胜感激:)

【问题讨论】:

    标签: c


    【解决方案1】:

    此时:

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

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

    k = k * 10;
    

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

    【讨论】:

    • 就是这样,正确初始化变量就可以了 - 谢谢!我的印象是它们都会被初始化为 0,但显然不是。
    • C 标准规定只有静态变量会自动初始化为零。
    • OP 可能认为该行末尾的 = 0 应用于此处声明的所有变量,而不仅仅是最后一个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    相关资源
    最近更新 更多