我正在尝试解决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
任何帮助将不胜感激:)
答案 0 :(得分:2)
此时:
int c, k, x, y, state, place, total, reverse = 0;
你创建一个变量k,但没有给它任何值。不久之后:
k = k * 10;
你使用这个变量。此时,您的程序会出现未定义的行为 - 可能发生任何事情。